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

时间:2018-11-05 02:40:40

标签: python python-3.x inheritance tkinter menu

我一直试图在程序中添加主菜单,但遇到了麻烦。 我不太了解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()

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

1 个答案:

答案 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