我正在尝试使用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()
我的代码在这里:
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()
答案 0 :(得分:15)
基于您对其中一个答案所做的一些评论,您显然是在Macintosh上运行它。代码工作正常,但菜单出现在mac菜单栏而不是像在Windows和Linux上那样在窗口上。因此,就菜单栏而言,您的代码没有任何问题。
答案 1 :(得分:4)
带说明的代码
从个人经验来看,我发现在小部件方法中管理所有小部件通常更容易。这就是我在这里所做的,它起作用了。而且,我使用了master,而不是父母。我现在将逐步指导您完成代码。
from Tkinter import *
我们导入Tkinter(GUI内容)
class App(Frame):
我们创建了一个名为App
的类,其中包含小部件的Frame
。
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.widgets()
我们创建了一个名为__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)
我们创建了widgets
方法。这是添加小部件menubar
的地方。如果我们要创建更多的小部件,他们也会在这里。
root=Tk()
root.title("Menubar")
app=App(root)
root.mainloop()
最后,我们给整个窗口一些属性。我们给它一个标题Menubar
,然后运行App
类。最后,我们使用root.mainloop
启动GUI的主循环。
答案 2 :(得分:1)
如果您正在进行任何涉及您要查看或测试的菜单栏的GUI,请检查您的Mac菜单栏。它的微妙,你可能认为你的代码是不工作的。单击应用程序(在本例中为python窗口),它将显示一个下拉菜单栏。
答案 3 :(得分:0)
我正在尝试上面的代码,但是我得到的只是macOS菜单栏上的“ Python”,这是通常的下拉菜单。 tkinter似乎在macOS 10.14.1上似乎不起作用
我认为正在发生的事情是,有一些特定于Mac的修复程序正在更改事件代码,因此某些菜单项最终会出现在Python菜单项下,而不是预期的位置,我在自己的实验中看到了其中的一些内容。当我扩展代码并使用一些保留的FILE事件代码而不是标准事件代码时,情况会更好。
#!/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
# -*- coding: utf-8 -*-# -*- coding: utf-8 -*-
from tkinter import *
class App(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.widgets()
def widgets(self):
menubar = Menu(root)
menubar.add_command(label = 'File')
menubar.add_command(label = 'quit', command = root.quit())
root.config(menu = menubar)
root = Tk()
root.title('Menubar')
app = App(root)
root.mainloop()