Tkinter开发现金簿程序时在Class内部创建菜单不显示问题求助
问题定位
你遇到的菜单不显示问题由3处代码错误共同导致:
- Menu_ex类的初始化逻辑存在缺陷,既没有保存传入的父窗口实例,也没有主动执行菜单生成的initUI方法
- 你在MainWindow的初始化流程中从未创建过Menu_ex类的实例,菜单生成代码完全没有被执行
- Menu_ex的退出方法调用对象错误,无法正常触发窗口退出
代码修正
1. 调整Menu_ex类实现
class Menu_ex(): def __init__(self, parent): self.parent = parent self.initUI() def initUI(self): menubar = Menu(self.parent) self.parent.config(menu=menubar) # 新增tearoff=0禁用菜单默认的拖拽分离功能,避免显示空白横线 fileMenu = Menu(menubar, tearoff=0) fileMenu.add_command(label='Exit', command=self.onExit) menubar.add_cascade(label='File', menu=fileMenu) def onExit(self): # 调用父窗口的退出方法,而非当前Menu_ex实例的quit(不存在该方法) self.parent.quit()
2. 在MainWindow中实例化菜单
在MainWindow类的__init__方法的末尾,添加如下代码完成菜单实例化:
# 初始化菜单栏 self.menu = Menu_ex(self)
3. 修正open_window方法归属
你当前定义的open_window是全局方法,需要调整缩进将其放到MainWindow类内部,作为类的实例方法才能正常调用弹出二级窗口。
修正完成后运行程序即可看到左上角的File菜单,点击Exit可正常退出程序。
内容的提问来源于stack exchange,提问作者Frank Aldridge
相关产品推荐
相关产品推荐

