2017-02-21 12 views
-2

У меня есть следующие строки в большой программе.Что не так с этими линиями?

username = Entry(loginPage) 
password = Entry(loginPage) 

button1 = Button(loginPage,text = "Login", fg = "red", command = loginClicked(username.get(),password.get())) 

Когда программа запущена, функция loginClicked запускается один раз в начале (когда поля пусты, а кнопка не была нажата), и что это единственный раз, когда он работает. После того, как кнопка нажата, функция не запускается вообще. Утверждение печати в функции подтверждает это.

ответ

0

Как указано в комментариях, при создании виджета, который вы вызываете («работает»), функция перед созданием виджета вместо передачи дескриптора функции (может быть, неверная терминология здесь) на параметр виджетов command=.

Это может быть решен с помощью анонимных функций с lambda:

button1 = Button(root,text = "Login", 
       fg = "red", 
       command = lambda: loginClicked(username.get(), password.get())) 

Это создает функцию «одноразовую», чтобы подпитывать обратный вызов Tkinter, которая вызывает вашу функцию loginClicked() с его правильными аргументами.

Вы также можете прочитать effbot.org для получения дополнительной информации о обратных вызовах Tkinter

 Смежные вопросы

  • Нет связанных вопросов^_^