@Keesti

Почему функция срабатывает при запуске программы, но не работает при дальнейших вызовах?

Изучаю графический интерфейс, решил написать небольшую программу (не особо важно, что она должна была делать), но столкнулся с вот такой вот проблемой.
Функция check срабатывает при запуске программы, но не вызывается при нажатии кнопки, которая как раз-таки должна была её вызывать. Не могу понять в чём проблема.
Заранее, спасибо.

Текст программы:

from tkinter import *

class App:

    def __init__(self, master):
        frame = Frame(master)
        frame.pack()

        self.answer1 = Button(
            frame, text="2", command=self.check(2)
        )
        self.answer1.pack()

        self.lable = Label(
            master, text='''Сколько будет 2+2?
            Пожалуйста, введите ответ(только цифры)''',
            bg="black", fg="white"
        )
        self.lable.pack()

        self.button = Button(
            frame, text="Выход", command=frame.quit
        )
        self.button.pack()

    def check(self, x=int):
        if x != 4:
            print("Ответ ", x, " неверен")
        else:
            print("Верно")

root = Tk()
root.geometry('600x420')
app = App(root)

root.mainloop()
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
потому что там должно быть имя функции а у вас ее вызов.
Имя это self.check
а вызов это self.check(2)
вот он и вызывается при создании кнопки а так как она ничего не возвращает то None присваивается команнде - нажатие на кнопку с command=None ничего не делает.
Вы захотите узнать как исправить:
можно использовать однострочную(lambda) функцию
self.answer1 = Button(
            frame, text="2", command=lambda: self.check(2)
        )

lambda: self.check(2) - вернет указатель на функцию которая вызовет self.check с аргументом 2 при своем вызове без каких либо аргументов и вернет результат self.check(2) если он был бы нужен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
16 мая 2024, в 23:36
200000 руб./за проект
16 мая 2024, в 23:10
12000 руб./за проект