2015-10-24 60 views
1

我正在創建一個文本編輯器,我正在嘗試編輯默認的Mac應用程序菜單。 Mac application menu < -The菜單爲什麼不顯示此tkinter菜單窗口小部件的一部分?

我跟着this教程編輯它,它正常工作對自己是這樣的:

from Tkinter import * 
root=Tk() 
menubar = Menu(root) 
appmenu = Menu(menubar, name='apple') 
menubar.add_cascade(menu=appmenu) 
appmenu.add_command(label='About My Application') 
appmenu.add_separator() 
root['menu'] = menubar 
root.mainloop() 

但是當我嘗試在我的菜單欄項目添加在另一個腳本我的文字編輯器,它只會顯示文本編輯器位而不顯示編輯的應用程序菜單。

我怎樣才能同時顯示?

問題代碼:

from Tkinter import * 
class Main(object): 
    def __init__(self, root): 
     root.title("PyText") 
     #Text editor menu items 
     self.m1=Menu(root) 

     self.fm=Menu(self.m1, tearoff=0) 
     self.fm.add_command(label="New", command=self.saveas) 
     self.fm.add_command(label="Open", command=self.saveas) 
     self.fm.add_command(label="Save", command=self.saveas) 
     self.fm.add_command(label="Save as...", command=self.saveas) 
     self.fm.add_command(label="Close", command=self.saveas) 
     self.fm.add_separator() 
     self.fm.add_command(label="Exit", command=root.quit) 
     self.m1.add_cascade(label="File", menu=self.fm) 

     self.editmenu = Menu(self.m1, tearoff=0) 
     self.editmenu.add_command(label="Undo", command=self.saveas) 
     self.editmenu.add_separator() 
     self.editmenu.add_command(label="Cut", command=self.saveas) 
     self.editmenu.add_command(label="Copy", command=self.saveas) 
     self.editmenu.add_command(label="Paste", command=self.saveas) 
     self.editmenu.add_command(label="Delete", command=self.saveas) 
     self.editmenu.add_command(label="Select All", command=self.saveas) 
     self.editmenu.add_separator() 
     self.m1.add_cascade(label="Edit", menu=self.editmenu) 
     #Problem code here 
     self.appmenu = Menu(self.m1, name="apple", tearoff=0) 
     self.m1.add_cascade(menu=self.appmenu) 
     self.appmenu.add_command(label="About PyText") 
     self.appmenu.add_separator() 

     root.config(menu=self.m1) 



     self.t1=Text(root) 
     self.t1.config(width=90, height=40) 
     self.t1.grid() 

    def saveas(self): 
     self.filewin = Toplevel() 
     self.filewin.title("Name") 
     self.e1=Entry(self.filewin) 
     self.e1.grid() 
     self.button = Button(self.filewin, text="Save", command=self.save) 
     self.button.grid() 

    def save(self): 
     with open(self.e1.get(), "w") as f: # this instance variable can be accessed 
      f.write(self.t1.get('1.0', 'end')) 


root = Tk() 
app = Main(root) 
root.mainloop() 
+0

從教程中的位不適合我,而不是顯示'apple'我得到'()'。只需更改它以匹配您的其他菜單代碼。 'self.m1.add_cascade(menu = self.appmenu,label =「apple」)' –

回答

2

從本教程中的示例代碼不爲我所有的工作方式(至少在我目前的OS 10.10)。如果您打算將此設置爲獨立應用程序,我不會擔心手動更改標籤。如果您使用py2app或cx_freeze將其設爲獨立應用程序,則您在setup.py腳本中設置的應用程序名稱將在菜單欄中顯示爲YourAppName; about YourAppName也是如此。

有一個部分解決方案;重新訂購你的代碼。如果在創建菜單後移動創建對象About this app的部分,它將起作用。以下是它在代碼中的外觀:

class Main(Tk): 
    def __init__(self): 
     Tk.__init__(self) 
     self.title("PyText") 
     #Text editor menu items 
     self.m1=Menu(self) 

     self.appmenu = Menu(self.m1, name="apple") 
     self.m1.add_cascade(menu=self.appmenu) 
     self.appmenu.add_command(label="About PyText") 
     self.appmenu.add_separator() 

     # Other menu bar code... 

不幸的是,這不會改變主菜單欄的名稱。但是,如果您按照上面的要求製作這款應用,則無需擔心這一點。

編輯

我發現了一個潛在的解決方案,可以幫助您切換到任何你想要的默認Python菜單項。去我找到的this post

相關問題