我一直试图在程序中添加主菜单,但遇到了麻烦。 我不太了解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()
文件菜单对我不显示。有帮助吗?
答案 0 :(得分:1)
问题: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)
您可以在.config(...
内class MenuBar
进行以下操作:
parent.config(menu=self)
使用Python测试:3.5-TkVersion':8.6