所以我有一個Python 3和Tkinter應用程序。我正在試圖添加一個菜單欄到它彈出的窗口的頂部。這很好創建,但只要我嘗試grid()
它,這一切都變得不合時宜並給我這個錯誤:Tkinter網格管理器無法管理'頂層窗口'菜單
[first line omitted]
File "C:\Users\Me\Documents\sync.py", line 13 in __init__
self.createWidgets()
File "C:\Users\Me\Documents\sync.py", line 21, in createWidgets
self.menubar.grid(column = 0, comlumnspan = 3)
File "C:\Program Files (x86)\Python34\lib\tkinter\__init__.py", line 2020, in grid_configure + self._options(cnf,kw))
_tkinter.TclError: can't manage ".41452544.49048880": it's a top-level window
所以從這一點,這是相當明顯,流動工作:__init__
調用createWidgets
創建self.menubar
,添加子菜單,來電self.menubar.grid
。
我無法弄清楚究竟是爲什麼的Tkinter認爲它被稱爲網格菜單欄是一個頂層窗口。被列在痕跡中的self.menubar.grid()
顯然是問題的原因而不是根窗口,因此必須是它的思想。
這裏的代碼有問題的位:
def createWidgets(self):
self.menubar = tk.Menu(self)
self.menubar.grid(column = 0, columnspan = 3)
SyncMenu = tk.Menu(self.menubar, tearoff = 0)
SyncMenu.add_command(label = "Connect", command = self.Sync.Connect)
SyncMenu.add_command(label = "Disconnect", command = self.Sync.Disconnect)
FileMenu = tk.Menu(self.menubar, tearoff = 0)
FileMenu.add_command(label = "Upload File", command = self.File.Upload)
FileMenu.add_command(label = "Browse Online Files", command = self.File.Browse)
self.menubar.add_cascade(label = "Sync", menu = SyncMenu)
self.menubar.add_cascade(label = "File", menu = FileMenu)
同樣的錯誤出現無論身在何處,我把電話給grid()
。
這個問題的另一部分是,我在Python 3和更新Tkinter的,所以沒有tk.Tk()
我。相反,要初始化,我有:
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self,master)
self.grid()
self.createWidgets()
self.master.geometry("500x500")
您無法在'Menu'實例上調用'grid'。這很明顯,因爲菜單總是停留在菜單欄上。不需要「網格」。 – TidB 2014-09-05 18:44:22
@TB:所以我做什麼呢? – ArtOfCode 2014-09-05 18:45:14
不要使用'grid',這是一個關於菜單的教程:[link](http://www.tkdocs.com/tutorial/menus.html) – TidB 2014-09-05 18:48:54