Как настроить функцию содержимого элементов / изображений холста tkinter? - PullRequest
0 голосов
/ 24 февраля 2020

Я добавил изображение png с прозрачными областями (альфа = 0) на холст tkinter (см. Минимальный пример ниже). Щелчок мыши распознается при нажатии где-нибудь в прямоугольнике, который содержит изображение tkinter.

Как настроить функцию так, чтобы любое связывание мыши (щелчок, перемещение и т. Д. c.) Вызывалось только тогда, когда мышь расположена на пикселях с ненулевыми альфа-значениями изображения?

Пример смокинга (linux талисман): enter image description here

try:
    # Tkinter for Python 2.xx
    import Tkinter as tk
except ImportError:
    # Tkinter for Python 3.xx
    import tkinter as tk

image_path = "./tux.png"

class Application(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, master)
        self.canvas = tk.Canvas(self, width=600, height=600)
        self.canvas.pack(fill="both", expand=True)

        # create an example image
        self.tk_image = tk.PhotoImage(file=image_path)
        self.image_obj= self.canvas.create_image(200, 200, anchor = 'center',
                image=self.tk_image)
        self.canvas.tag_bind(self.image_obj, '<Button-1>', self.clicked)

    def clicked(self, event):
        print("I am tux.")

def main():
    app_win = tk.Tk()
    app = Application(app_win).pack(fill='both', expand=True)
    app_win.mainloop()

if __name__ == '__main__':
    main()  

1 Ответ

2 голосов
/ 24 февраля 2020

Как настроить функциональность таким образом, чтобы любая привязка мыши (щелчок, перемещение и т. Д. c.) Вызывалась только в том случае, если мышь расположена на пикселях с ненулевыми альфа-значениями изображения?

Вы не можете. Это просто не то, что напрямую поддерживает tkinter. К сожалению, поддержка прозрачности в tkinter немного отсутствует.

Однако вы можете сделать это с помощью функции bound, получающей объект изображения, вычисляющей, какой пиксель был нажат, а затем запрашивающей экземпляр изображения. чтобы получить цвет этого пикселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...