我一直在尝试向程序添加主菜单,但遇到了问题。我并不完全理解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