【问题标题】:Tkinter right-click popup unresponsive on OSXTkinter 右键单击​​弹出窗口在 OSX 上无响应
【发布时间】:2015-08-20 12:22:55
【问题描述】:

我一直在寻找一种在 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。 有没有其他人经历过这种情况,是否有可行的解决方法?

【问题讨论】:

    标签: python macos tkinter


    【解决方案1】:

    出于奇怪的历史原因,在 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()
    

    【讨论】:

    • 在 Mac OSX(可能还有其他平台)上,您需要添加 self.config(menu=self.popupMenu) 才能使其正常工作。
    • @ThomasAntony:不,除了抛出错误之外,它不会做任何事情。在这种情况下,self 是一个框架,而框架没有 menu 选项。 .此外,问题是关于上下文相关(“右键单击”)菜单,而不是菜单栏。
    • 另一件事是窗口必须聚焦,post 才能工作。
    • @ThomasAntony:这仅适用于 OSX 附带的错误版本的 python。有更好的版本没有这个限制。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多