我想使用tkinter
製作一個Python GUI,我需要一個菜單項打開主窗口的另一個副本。我試着做下面的代碼,當我運行程序時,它凍結了一下,然後打開了大量的窗口。最後打印的錯誤信息如下。Tkinter無意中遞歸與菜單欄命令...原因?
我有兩個問題。
- 我該如何完成使「新建」按鈕打開一個新窗口和
TheThing
類的實例的任務? (在IDLE中,File > New File
具有我正在尋找的行爲。) 爲什麼會發生此錯誤?
RecursionError: maximum recursion depth exceeded while calling a Python object
我的代碼:
import tkinter as tk
class TheThing:
def __init__(self, root):
root.option_add('*tearOff', False)
menubar = tk.Menu(root)
root.config(menu = menubar)
file = tk.Menu(menubar)
menubar.add_cascade(menu = file, label = "File")
file.add_command(label = 'New', command = doathing())
def doathing():
thing1 = tk.Tk()
thing2 = TheThing(thing1)
def main():
win = tk.Tk()
do = TheThing(win)
win.mainloop()
if __name__ == '__main__': main()
地方我已經找了答案:
This question好像它是具有非常類似的問題。我可能可以研究並找到解決方案,但我仍然不會理解問題。
This question是關於遞歸,python和tkinter,但似乎更多的是
after
的事情。
'command = d oathing()'立即執行回調(並且在回調中創建一個新的窗口,進行無限遞歸),並將其結果綁定到'command'參數。刪除'()'。而且,那究竟是幹什麼呢? –
修復了它。我刪除了'()',它看起來像預期的那樣工作。它應該打開一個新窗口,完全像舊窗口。 Python IDLE文本編輯器在'File> New File'下有這種行爲。謝謝。 – rod