无法在Mac上重新启用Python tkinter中的菜单
我用Tkinter创建了一个图形界面,里面有一个菜单。我想要一个按钮,点击后可以切换菜单的启用和禁用状态。
于是我写了一个简单的例子(参考了这个链接),在我的Windows 7和Ubuntu 14.04机器上运行得很好(使用的是Python 2.7.6和Tkinter版本81008)。但是当我在Mac 10.9上尝试同样的代码时,菜单虽然可以禁用,但却无法重新启用。此外,下面的例子还会打印出它认为菜单的状态(使用entrycget),结果显示它认为菜单在启用和禁用之间切换。
有没有人能复现这个问题?这是一个已知的bug吗?或者在Mac上有没有其他方法可以启用/禁用菜单呢?
from Tkinter import *
root=Tk()
def hello():
print "hello !"
menubar = Menu(root)
submenu = Menu(menubar, tearoff=0)
submenu.add_command(label="Hello", command=hello)
menubar.add_cascade(label='test', menu=submenu)
root.config(menu=menubar)
def toggle():
print('I think the menu bar is %s' % menubar.entrycget(0,"state"))
if menubar.entrycget('test', "state")=="normal":
print('disabling')
menubar.entryconfig('test', state=DISABLED)
print('disbled')
else:
print('enabling')
menubar.entryconfig('test', state=NORMAL)
print('done')
b = Button(root, text='Toggle', command=toggle)
b.pack()
root.mainloop()
1 个回答
4
正如在这里提到的,这似乎是苹果提供的Tk 8.5中的一个bug。从OS X 10.6开始,苹果一直在使用的Cocoa版本的Tk存在很多问题,而这些问题在更新版本的Tk 8.5中已经修复了。使用当前的ActiveTcl 8.5.15,你的测试似乎可以正常工作。不过,遗憾的是,你不能轻易更改苹果系统自带的Python所使用的Tcl/Tk版本。一个解决办法是从python.org的二进制安装包中安装当前的Python 2.7.7,并同时安装ActiveTcl 8.5.15。更多信息可以在这里找到: