2013-03-12 141 views
3

我想使用Tkinter的GUI,并已实现菜单栏。我查看了一些教程并为它编写了一些代码,但菜单栏似乎从未出现 - 只是具有白色背景的空白帧。这不仅仅发生在我的代码上;在将上述教程之一的代码复制并粘贴到新脚本中时,会出现相同的行为。蟒蛇Tkinter菜单栏不显示

我会很感激,如果任何人可以摆脱任何光线导致这一点。我的系统是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() 
+2

你的例子从来没有创建self.master,这是你的实际代码? – 2013-03-12 23:09:06

+0

感谢您的回复!这实际上不是我的代码,它是我使用的其中一个教程中的其他人的代码,但他们都遇到同样的问题,所以我认为将它粘贴更好。我会编辑我的帖子以包含我的。 – user2163043 2013-03-13 00:05:43

+0

你也是对的,我没有注意到关于self.master的信息 - 猜猜它写得太急了!如果我放一个root = Tk(),把root作为App的__init__的参数(并将其馈入最后一行),立即将self.master = root放入__init__并放入root。mainloop()在脚本的末尾,我仍然找到相同的结果... – user2163043 2013-03-13 00:12:59

回答

4

代码说明

从个人的经验,我发现在小部件方法中管理所有小部件通常更容易。这就是我在这里所做的,而且很有效。此外,而不是父母,我用主。我现在将逐步引导您完成代码。

from Tkinter import * 

我们进口的Tkinter(GUI东西)

class App(Frame): 

我们创建一个名为App类,这是Frame,其中小部件举行。

def __init__(self, master): 
     Frame.__init__(self, master) 
     self.grid() 
     self.widgets() 

我们创建了一个名为__init__的方法。这会初始化该类,并运行另一种称为widgets的方法。我们创建了widgets方法。这是添加小部件menubar的位置。如果我们要创建小部件,他们也会在这里。

root=Tk() 
root.title("Menubar") 
app=App(root) 
root.mainloop() 

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

+0

@ user2163043如果我的回答完全对您有所帮助,请给我一个绿色的复选标记。它会帮助其他人看到这是一个很好的答案。如果没有,请用我的答案告诉我这个问题。 – xxmbabanexx 2013-03-13 01:44:21

+0

哇,你好,谢谢你的回答!奇怪的是,虽然我运行它时,实际上并没有弹出gui - python启动器运行,但没有显示窗口。如果我在root.title之后放置了一个root.geometry(“250x300 + 300 + 300”),但它的功能与之前一样 - 调出一个空白的框架(此行也在我的原始代码中 - 对不起,忘记了提到它,现在编辑我的问题)。很奇怪。教程在这里:http://skriticos.blogspot.co.uk/2009/07/tkinterttk-tutorial-part-2-menu-label.html。谢谢你的帮助! – user2163043 2013-03-13 12:34:10

+0

@ user2163043我也有一个mac - 我也会在那里运行程序。所以......菜单栏是否显示?它对我来说很好......可能发生的事情是Mac Menubar出现在上面的栏中,苹果标志旁边的区域和程序名称。那实际上几乎肯定发生了什么。 – xxmbabanexx 2013-03-13 12:52:43

12

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

+0

正确,但在发布此消息之前,也在其他答案的评论中提到了这一点。 – Junuxx 2013-03-13 13:59:45

+5

仍然+1,因为这是答案(有同样的问题) – Roberto 2014-07-23 07:53:42

1

如果您正在做任何涉及您希望查看或测试的菜单栏的GUI,请检查您的mac菜单栏。它的微妙,你可能认为你的代码是不工作。点击应用程序(在这种情况下,python窗口),它会显示一个下拉菜单栏。