Python Tkinter菜单栏不显示

use*_*043 4 python tkinter menubar

我正在尝试使用Tkinter创建一个GUI,并开始实现一个菜单栏.我看了几个教程并为它编写了一些代码,但似乎没有出现菜单栏 - 只是一个带有白色背景的空白框架.这不仅仅发生在我的代码中; 在将上述教程之一的代码复制并粘贴到新脚本中时,表现出相同的行为.

如果有人能够解释造成这种情况的原因,我会很感激.我的系统是OS X 10.5,Python 2.7,Tk 8.4.这是教程中看起来不起作用的代码:

#!/usr/local/bin/python2.7

from Tkinter import *
from ttk import *

class App(Frame):
    def __init__(self):
            Frame.__init__(self)

            self.master.geometry('400x300')
            self.master.title(__file__)

            self.pack()

            self.menu = Menu(tearoff=False)
            self.master.config(menu = self.menu)

            fm = self.file_menu = None
            fm = Menu(self.menu, tearoff=False)
            self.menu.add_cascade(label='File', menu = fm)

            fm.add_command(label='Say Hello', command = self.say_hello)
            fm.add_separator()
            fm.add_command(label='Quit', command = self.quit)

            self.mainloop()

    def say_hello(self, *e):
            self.label = Label(self.master, text='Hello there!')
            self.label.pack(anchor=CENTER, fill=NONE, expand=YES, side=LEFT)

if __name__ == '__main__':
    App()
Run Code Online (Sandbox Code Playgroud)

我的代码在这里:

from Tkinter import *

class App(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)

        parent.title("Cluedo Solver 1.0")

        menubar = Menu(root)
        menubar.add_command(label="File")
        menubar.add_command(label="Quit", command=root.quit())

        root.config(menu=menubar)

root=Tk()
root.geometry("300x250+300+300")
app=App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 18

基于您对其中一个答案所做的一些评论,您显然是在Macintosh上运行它.代码工作正常,但菜单出现在mac菜单栏而不是像在Windows和Linux上那样在窗口上.因此,就菜单栏而言,您的代码没有任何问题.

  • 还是+1,因为这是答案(有同样的问题) (7认同)

xxm*_*exx 4

带有解释的代码

从个人经验来看,我发现在小部件方法中管理所有小部件通常更容易。这就是我在这里所做的,并且有效。另外,我使用了 master,而不是parent。现在我将逐步引导您完成代码。

from Tkinter import *
Run Code Online (Sandbox Code Playgroud)

我们导入 Tkinter (GUI 的东西)

class App(Frame):
Run Code Online (Sandbox Code Playgroud)

我们创建一个名为 的类App,它是Frame保存小部件的地方。

    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.widgets()
Run Code Online (Sandbox Code Playgroud)

我们创建一个名为 的方法__init__。这会初始化该类,并运行另一个名为 的方法widgets

    def widgets(self):


        menubar = Menu(root)
        menubar.add_command(label="File")
        menubar.add_command(label="Quit", command=root.quit())

        root.config(menu=menubar)
Run Code Online (Sandbox Code Playgroud)

我们创建该widgets方法。menubar这是添加小部件的地方。如果我们要创建更多小部件,它们也会在这里。

root=Tk()
root.title("Menubar")
app=App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

最后,我们给整个窗口一些属性。我们给它一个标题,Menubar并运行该类App。最后,我们使用 启动 GUI 的主循环root.mainloop