2016-05-05 2 views
0

Я новичок в GUI и просто изучаю, как использовать Tkinter. Я написал программу python, чтобы поместить учеников в мой класс в пары для моих диаграмм сидения. Сама программа работает нормально; проблема заключается в tkinter gui. Я пытался заставить кнопку генерировать и отображать новый набор пар каждый раз. Вместо этого GUI будет отображать первый набор пар, как только я его открываю, даже не нажимая кнопку. Кнопка ничего не делает. Если я запускаю его в консоли, я не получаю никаких сообщений об ошибках или ничего напечатанных на консоли.кнопка не будет повторять команды tkinter

В Button commands in Tkinter Я видел ответ, чтобы использовать лямбда. Когда я попробую, ярлык изначально будет пустым. Он отображает пары, когда кнопка будет нажата в первый раз, как и ожидалось, но при последующих нажатиях она просто делает ярлык пустой.

Я не уверен, в чем проблема. Вы можете мне помочь? Вот код:

from Tkinter import * 
from SeatingChart import * 



root = Tk() 

class App: 

    def __init__(self, master): 
     self.win = Frame(master) 
     self.win.pack() 
     self.d = Label(self.win, text = "", width=140) 
     self.d.pack() 
     self.b = Button(self.win, text="Pair Up!", command=self.display_pairs(roster)) 
     self.b.pack() 

    def display_pairs(self, l): 
     self.d.config(text=pair(roster)) 


app = App(root) 

mainloop() 

ответ

0

При создании кнопки command, что вы поставляете это результат метода display_pairs (который None, потому что не return ничего), а не ссылка на метод ,

Try:

class App: 

    def __init__(self, master): 
     self.win = Frame(master) 
     self.win.pack() 
     self.d = Label(self.win, text = "", width=140) 
     # Maybe display an initial roster? 
     # self.d = Label(self.win, text = pair(roster), width=140) 
     self.d.pack() 
     self.b = Button(self.win, text="Pair Up!", command=self.display_pairs) 
     self.b.pack() 

    def display_pairs(self): 
     self.d.config(text=pair(roster)) 
+0

Спасибо. Я пробовал это, но тогда я получаю это: ТипError: display_pairs() принимает ровно 2 аргумента (1 данный) –

+0

Вы изменили метод display_pairs, как я показал? Я удалил параметр 'l', поскольку он не используется. –

+0

Теперь у меня есть. Это делает то же самое, что и при попытке использовать лямбда: сначала будет отображаться результат, а затем пустым при последующих нажатиях кнопок. –

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