Код Python не работает должным образом в Mac OS X (10.8), но работает в Windows 7, почему?

Я изучаю Python по книге «Введение в программирование с использованием Python (Pearson 2013)». Я использую PyCharm 2.7 на своей Mac OS X (10.8) для написания кода Pyhon 3.

Следующий код (создать графический интерфейс с помощью tkinter и добавить всплывающее меню) не работает должным образом в моей Mac OS X. Проблема в том, что всплывающее меню не отображается при нажатии правой кнопки мыши. Я тестировал код на своей виртуальной машине 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()

person narzero    schedule 15.04.2013    source источник
comment
Код работает при нажатии средней кнопки мыши. Но это все еще оставляет меня с вопросом, почему он работает со вторичным щелчком по окнам и средним щелчком в OS X?   -  person narzero    schedule 15.04.2013


Ответы (1)


Решение

Чтобы код работал правильно в Mac OS X, необходимо сделать следующее.

Изменять:

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

To:

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

Button-3 - это средняя кнопка щелчка, а Button-2 - вторичная кнопка щелчка.

Чтобы он работал в Windows, используйте Button-3.

person narzero    schedule 15.04.2013