2015-06-05 68 views
1

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

为了参数的缘故,我复制了写在这两页上的代码,并试图在我的机器上运行它们。

tkinter app adding a right click context menu?

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

既不是我希望他们在OSX的方式工作过,但是当我的Ubuntu虚拟机上运行他们,他们做的。

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

回答

4

对于奇数历史的原因,右按钮是按钮 Mac上,但在UNIX和Windows 。

这里是我的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() 
+0

在Mac OSX(可能还有其他平台),你需要添加'self.config(菜单= self.popupMenu)'对于这工作。 –

+0

@ThomasAntony:不,除非抛出错误,否则不会做任何事情。在这种情况下,'self'是一个框架,框架没有'menu'选项。 。此外,问题是关于上下文敏感(“右键单击”)菜单,而不是菜单栏。 –

+0

另一件事是窗口必须专注于'后''工作。 –

相关问题