[英]Why doesn't a part of this tkinter Menu widget not show up?
I am creating a Text editor and I am trying to edit the default Mac Application menu. 我正在创建一个文本编辑器,并且试图编辑默认的Mac Application菜单。
<—The Menu
<-菜单
I followed this tutorial to edit it and it works fine on its own like 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()
But when I try add in my menubar items for my text editor in another script, it will only display the text editor bits and not the edited application menu. 但是,当我尝试在另一个脚本中为文本编辑器添加菜单栏项时,它将仅显示文本编辑器位,而不显示已编辑的应用程序菜单。
How can I get both to show at the same time?
如何让两者同时显示?
Problem code: 问题代码:
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()
The example code from the tutorial does not work all the way for me (at least on my current OS 10.10). 本教程中的示例代码对我而言并非一路都有效(至少在当前的OS 10.10上如此)。 I wouldn't worry about changing the label manually if you are planning to make this a stand alone app.
如果您打算使它成为一个独立的应用程序,我不会担心手动更改标签。 If you make this a stand alone app with py2app or cx_freeze, the name of you app you set in your
setup.py
script will show in the menubar as YourAppName
; 如果使用py2app或cx_freeze将此应用程序制作为独立应用程序,则在
setup.py
脚本中设置的应用程序名称将在菜单栏中显示为YourAppName
; and the same goes for the about YourAppName
. about YourAppName
。
There is a partial solution; 有一个局部的解决方案。 reorder your code.
重新排序您的代码。 If you move the section that creates the
About this app
object just after the menu is created, it will work. 如果在创建菜单后立即移动创建
About this app
对象的部分,它将起作用。 Here is how it would look in your code: 这是在代码中的样子:
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...
Unfortunately, this does not change the name of the main menubar item. 不幸的是,这不会更改主菜单栏项的名称。 But if you make this an app as I decried above, you don't need to worry about this.
但是,如果您像我上面所说的那样将其设置为应用程序,则无需担心。
EDIT 编辑
I found a potential solution that may help you change the the default Python
menu item to whatever you want. 我发现了一个潜在的解决方案,可以帮助您将默认的
Python
菜单项更改为所需的任何内容。 Go to this post I found. 转到我发现的帖子 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.