我想使用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