TclError:无法分配更多菜单

问题描述 投票:0回答:2

因此,我正在用 Python 编写一个程序,对于用户界面,我使用 Tkinter,该应用程序似乎运行良好,但当我在其中导航一段时间时,我收到以下 TclError:

TclError: No more menus can be allocated.

我做了一些研究,发现这些“菜单”在 Windows 上有限制,但我的问题是,我如何知道这些菜单正在被创建?当我停止使用它们时,如何删除它们?我使用“top.destroy()”删除顶部菜单的方法。但即使我生成越来越多的菜单,并且它溢出了 Windows 堆或其他任何东西。

这是我的程序的源代码: https://github.com/molBR/upgestao 有人可以帮忙吗? 预先感谢。

python tkinter tcl
2个回答
0
投票

我在创建自动隐藏菜单时遇到同样的错误。首先,我创建了自动生成和删除的虚拟(空)菜单栏来替换真实的菜单栏以隐藏它。因此,在隐藏了几十次之后,

tkinter
开始向我显示此错误:
TclError: No more menus can be allocated.

解决方案很简单:不要自动创建/删除菜单。

只需创建您想要的所有必要菜单并将它们保存在内存中。不要删除它们。并在程序运行期间在菜单之间切换。


0
投票

我之前也遇到过同样的错误。我正在制作一个应用程序,它将以前访问过的页面存储在堆栈中,以便用户重新访问它们。由于每次用户访问新页面时,前向堆栈都会被清除,因此我仅通过将其替换为 None 来覆盖堆栈中存储的页面。

self.back_stack[self.front] = None

页面仍然存储在内存中并且没有被销毁。当 tkinter 与 Windows 交互时,tkinter 中可以创建的菜单数量有限。因此,通过使用代码

self.current_page.destroy()

页面可以被销毁,菜单ID可以恢复并用于将来创建页面。通过销毁页面而不是将页面保留在内存中,可以避免此错误。

© www.soinside.com 2019 - 2024. All rights reserved.