【发布时间】:2015-06-17 03:04:45
【问题描述】:
我正在尝试使用 TkInter 编写一个简单的文本编辑器。我希望它像其他文本编辑器一样有一个菜单栏,您可以在其中保存、打开另一个文件等。
但是,每当我尝试向我的班级添加菜单栏时,程序只会启动,挂起大约半秒,然后退出。我不知道为什么会这样,或者如何调试它。这是我的代码。
#!/usr/bin/env python3
import functools
from tkinter import *
class mainWindow(Tk):
def initiate(self):
menuBarFrame = Frame(self).pack(side=TOP)
menubar = Menu(menuBarFrame)
menubar.add_command(label='Exit', command=quit())
root.config(menu=menubar)
mainloop()
win = mainWindow().initiate()
我尝试将.pack() 添加到该行
menubar = Menu(menuBarFrame)
但它给了我以下回溯:
File "XML.py", line 14, in <module>
win = mainWindow().initiate()
File "XML.py", line 9, in initiate
menubar = Menu(menuBarFrame).pack()
File "/usr/lib/python3.4/tkinter/__init__.py", line 1977, in pack_configure
+ self._options(cnf, kw))
_tkinter.TclError: can't pack ".140664986043280": it's a top-level window
当我删除菜单栏的代码并用一个简单的按钮替换它时,应用程序可以正常工作并启动。什么可能导致问题?
【问题讨论】:
-
您似乎遗漏了一些东西。您引用
root但从未定义它,您自己调用mainloop()而不是tkinter对象,win不必要地保存None等。你能提供一个MCVE 吗?跨度> -
menuBarFrame也是None,因为您存储的是pack()方法的返回值,而不是Frame对象接收器。