我继承的类MenuBar(tk.Menu)不显示MenuBar



我一直在尝试向程序添加主菜单,但遇到了问题。我并不完全理解python3的类结构,因为我对用它编程还很陌生。我在ubuntu 18.04上运行,这是我遇到问题的代码。

#! /usr/bin/env python3
import tkinter as tk
from tkinter import *
class Application(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
menubar = MenuBar(self)
self.config(menu=menubar)
def quitButton(self):
self.destroy()
class MenuBar(tk.Menu):
def __init__(self, parent):
tk.Menu.__init__(self, parent)
self.controller = parent
menubar = tk.Menu(self, tearoff=False)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Test", command=self.test_Test)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=lambda:    self.controller.quitButton())
menubar.add_cascade(label="File", menu=filemenu)
def test_Test(self):
print("This is a test")
if __name__ == "__main__":
app = Application()
app.title("test") 
app.mainloop()

文件菜单不显示给我。有帮助吗?

问题:tkinter。。。不显示主菜单

这里有几个问题。

class MenuBar(tk.Menu):
def __init__(self, parent):
tk.Menu.__init__(self, parent)
self.controller = parent

在这里,您创建了一个新的tk.Menu(...,父级==self
变量menubar包含tk.Menu(...对象。

menubar = tk.Menu(self, tearoff=False)

class __init__方法返回自身,因此您不返回新的menubar
返回一个class MenuBar(tk.Menu)对象,该对象为空!

更改为

class MenuBar(tk.Menu):
def __init__(self, parent):
  • 您的class MenuBar新菜单栏!因此,init参数进入

    tk.Menu.__init__(self, parent, tearoff=False)
    
  • 子菜单parent是此类,因此通过self

    filemenu = tk.Menu(self, tearoff=0)
    
  • filemenu项目添加为已用

    filemenu.add_command(label="Test", command=self.test_Test)
    filemenu.add_separator()
    filemenu.add_command(label="Exit", command=lambda: self.controller.quitButton())
    
  • 将子菜单添加到此对象,因此使用self.add...

    self.add_cascade(label="File", menu=filemenu)
    

您可以在class MenuBar中执行.config(...

parent.config(menu=self)

用Python测试:3.5-TkVersion':8.6

最新更新