2013-03-12 126 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窗口),它會顯示一個下拉菜單欄。