我一直在尝试向我的程序添加主菜单,但遇到了问题。 我不太了解 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()
我没有出现文件菜单。有什么帮助吗?
最佳答案
Question: tkinter ... not showing Main Menu
这里有几个问题。
class MenuBar(tk.Menu): def __init__(self, parent): tk.Menu.__init__(self, parent) self.controller = parent
Here, you create a new
tk.Menu(...
with parent ==self
.
The Variablemenubar
hold thetk.Menu(...
object.menubar = tk.Menu(self, tearoff=False)
一个
block 引用>class __init__
methode 返回自身,因此您不返回新的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
关于python - 我继承的类 MenuBar(tk.Menu) 不显示菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147637/