gpt4 book ai didi

python - Tkinter 网格管理器无法管理 'top level window' 菜单

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:47 25 4
gpt4 key购买 nike

所以我有一个 Python 3 和 Tkinter 应用程序。我目前正在尝试将菜单栏添加到它弹出的窗口的顶部。创建它很好,但是一旦我尝试 grid() 它,它就会变得困惑并抛出我这个错误:

[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")

最佳答案

您不能在菜单上使用网格。 Tkinter 认为它们是顶级窗口,因为它们漂浮在其他窗口之上。

创建传统菜单栏的正常方法是将其与根窗口的 menu 属性相关联:

root = tk.Tk()
menubar = tk.Menu(root)
...
root.configure(menu=menubar)

关于python - Tkinter 网格管理器无法管理 'top level window' 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com