无法在Mac上的Python tkinter中重新启用菜单

时间:2014-06-13 14:35:32

标签: python macos python-2.7 menu tkinter

我有一个我在Tkinter创建的GUI,它有一个菜单。我想要一个单击按钮切换启用/禁用菜单的按钮。

所以我编写了以下最小的例子(基于https://mail.python.org/pipermail/tkinter-discuss/2004-September/000204.html),它在我的Windows 7和Ubuntu 14.04机器上运行正常(使用Python 2.7.6和Tkinter Revision 81008)。但是,当我在Mac 10.9上尝试相同的代码(再次在Python 2.7.6和Tkinter Revision 81008下)时,菜单将禁用但不会重新启用。此外,下面的示例还打印出它认为菜单具有的状态(使用entrycget),并且打印出它认为菜单在启用和禁用之间交替显示。

有人可以重现这种行为吗?这是一个已知的错误?或者是否有另一种在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 个答案:

答案 0 :(得分:4)

here所述,这似乎是Apple提供的Tk 8.5中的一个错误。苹果自OS X 10.6以来一直出货的Tk的Cocoa版本存在许多问题,其中许多问题已在更新版本的Tk 8.5中得到修复。使用当前的ActiveTcl 8.5.15,您的测试似乎可以正常工作。不幸的是,您无法轻易更改Apple提供的Pythons系统使用的Tcl / Tk版本。一种选择是从python.org二进制安装程序和ActiveTcl 8.5.15安装当前的Python 2.7.7。这里有更多信息:

https://www.python.org/download/mac/tcltk/

https://www.python.org/downloads/