Tkinter在OSX上右键单击弹出窗口无响应

时间:2015-06-05 13:57:47

标签: python macos tkinter

我一直在寻找一种在OSX上显示右键单击弹出菜单的方法。 到目前为止,我所有的尝试都没有成功。相同的代码可以在Linux VM(Ubuntu)上正常工作。

为了论证,我复制了这两页中编写的代码并试图在我的机器上运行它们。

tkinter app adding a right click context menu?

http://effbot.org/zone/tkinter-popup-menu.htm

我没有按照我期望的方式在OSX上工作,但是当我在Ubuntu VM上运行时,它们就会这样做。

我使用的机器是运行OSX 10.6.8的Mac Mini4,1。 有没有其他人经历过这种情况并且有可行的解决方法吗?

1 个答案:

答案 0 :(得分:4)

由于奇怪的历史原因,右键是Mac上的按钮 2 ,而unix和windows上的按钮是 3

以下示例适用于我的OSX框:

try:
    # python 2.x
    import Tkinter as tk
except ImportError:
    # python 3.x
    import tkinter as tk

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        self.popupMenu = tk.Menu(self, tearoff=0)
        self.popupMenu.add_command(label="One", command=self.menu_one)
        self.popupMenu.add_command(label="Two", command=self.menu_two)
        self.popupMenu.add_command(label="Three", command=self.menu_three)

        self.bind("<Button-2>", self.popup)

    def menu_one(self):
        print "one..."

    def menu_two(self):
        print "two..."

    def menu_three(self):
        print "three..."

    def popup(self, event):
        self.popupMenu.post(event.x_root, event.y_root)

if __name__ == "__main__":
    root =tk.Tk()
    frame = Example(root, width=200, height=200)
    frame.pack(fill="both", expand=True)
    root.mainloop()