Python代码在Mac OS X(10.8)上无法正常运行,但在Windows 7上可以,为什么?

4
我正在使用《Python编程入门》这本书学习Python。我在我的Mac OS X(10.8)上使用PyCharm 2.7编写Python 3代码。
以下代码(创建带有tkinter的GUI并添加弹出式菜单)在我的Mac OS X上无法正常运行。问题在于右键单击时弹出式菜单不会显示。我在Windows 7虚拟机和Windows 7中测试了该代码,在Windows 7上可以完美运行。
所以我的问题是:为什么该代码在Windows 7上能够正常工作,但在Mac OS X上不能?
下面是代码:
from tkinter import *

class PopupMenuDemo:
    def __init__(self):
        window = Tk()
        window.title("Popup Menu Demo")

        # Create a popup menu
        self.menu = Menu(window, tearoff = 0)
        self.menu.add_command(label = "Draw a line", command = self.displayLine)
        self.menu.add_command(label = "Draw an oval", command = self.displayOval)
        self.menu.add_command(label = "Draw a rectangle", command = self.displayRectangle)
        self.menu.add_command(label = "Clear", command = self.clearCanvas)

        # Place canvas in window
        self.canvas = Canvas(window, width = 200, height = 100, bg = "white")
        self.canvas.pack()

        # Bind popup to canvas
        self.canvas.bind("<Button-3>", self.popup)

        window.mainloop()

    # Display a rectangle
    def displayRectangle(self):
        self.canvas.create_rectangle(10, 10, 190, 90, tags = "rectangle")

    def displayOval(self):
        self.canvas.create_oval(10, 10, 190, 90, tags = "oval")

    def displayLine(self):
        self.canvas.create_line(10, 10, 190, 90, tags = "line")
        self.canvas.create_line(10, 90, 190, 10, tags = "line")

    def clearCanvas(self):
        self.canvas.delete("rectangle", "oval", "line")

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

PopupMenuDemo()

代码似乎在按“中键”时能够正常工作。但这仍然让我想知道为什么它会在Windows上的副键单击和OS X中的中键单击中工作? - narzero
1个回答

5

解决方案

为了使代码在Mac OS X中正常工作,需要做以下更改:

更改为:

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

致:

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

Button-3是鼠标中键,而Button-2是鼠标右键。

在Windows系统中使用时,请使用Button-3。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接