python - tkinter add_checkbutton 菜单没有获得复选标记,尽管存在变量(MacOS)

标签 python tkinter

我有一个菜单:

class NodePopup(tk.Menu):
    def __init__(self, master):
        super().__init__(master, tearoff=0)
        self.send_disabled = tk.BooleanVar()
        self.add_checkbutton(label="Disable sending", 
            command=self.toggle_send, variable=self.send_disabled)

    def popup(self, node, event):
        self.send_disabled.set(node.some_flag)
        print('send_disabled:', self.send_disabled.get())
        self.post(event.x_root, event.y_root)


class View:
    def __init__(self, master)
        self.master = master
        self.canvas = #...
        # ...
        self.node_popup = NodePopup(self.master)
        self.canvas.bind("<Button-2>", self.popup)

    def popup(self, event):
        node_oval, node = self.find_node(event.x, event.y)
        self.node_popup.popup(node, event)

当调用my_menu.popup(e)时,它总是弹出而不带复选标记。 print() 打印出正确的值。

OS X 10.12,python 3.6.0b4。

问题是什么?

最佳答案

由于据报道此代码可以在 Linux 上运行,因此我报告了一个错误:http://bugs.python.org/issue28966 ,这又被关闭了。

由于 known problem ,用于 OS X 的 Python 没有内置 Tk,并使用 Apple 过时的 Tk 发行版。需要install an ActiveTcl .

作为解决方法,我更改了文本,很明显菜单项的含义发生了变化:

self.entryconfig(
    0, label='Enable sending' if node.m_bSendOff else 'Disable sending')

关于python - tkinter add_checkbutton 菜单没有获得复选标记,尽管存在变量(MacOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132189/

相关文章:

python - 是否有更短/更好的方法来验证请求参数?

python - 如何漂亮地打开Tkinter程序?

python - Tkinter OptionMenu 向多个 OptionMenus 添加命令

python - 如何在 Matplotlib 中创建 "dot plot"? (不是散点图)

Python如何将类函数从实例传递到另一个类

仅关于大规模迭代的 Python 列表索引超出范围

python - 使用音频的语音识别方法逐行写入文本文件

python - 如何在 Windows 上将 websockify 与 python 一起使用或将 websockify 编译为 Windows 可执行文件(一次用于多个客户端连接)

python - 在 Python 中将 tkinter ttk Entry 文本滚动到末尾

python - 如何设置tkinter框架的透明度?