Выяснить, активен ли многоугольник в холсте tkinter - PullRequest
0 голосов
/ 19 октября 2019

Я создал многоугольник внутри холста tkinter с параметром activeoutline = color . Это приводит к выделению многоугольника, если навести на него курсор мыши.
Теперь я хочу знать, находится ли мышь в данный момент в определенном многоугольнике, чтобы вызвать некоторые события самостоятельно. Очевидно, что я могу рассчитать его сам по текущей позиции мыши, но, поскольку tkinter все равно делает это (в противном случае не будет активной подсветки), я подумал, можно ли это получить с холста. Поэтому я попытался canvas.itemcget() и canvas.itemconfigure() получить информацию о состоянии определенного многоугольника, поскольку я думал, что это скажет мне, что это состояние "активно" или нет .... но это не так. Выполнение приведенного ниже минимального примера возвращает пустые строки для состояния. Есть ли способ получить эту информацию? Минимальный пример.

import tkinter as tk

master = tk.Tk()
canvas = tk.Canvas(master=master, width=200, height=100)

polygon_points1 = [25, 25, 75, 25, 75, 75, 25, 75]
polygon_points2 = [125, 25, 175, 25, 175, 75, 125, 75]

canvas.create_polygon(polygon_points1,
                      fill='red',
                      width=3,
                      activeoutline='black',
                      tags=('polygon1',))

canvas.create_polygon(polygon_points2,
                      fill='blue',
                      width=3,
                      activeoutline='black',
                      tags=('polygon2',))


def motion(event):
    print(event.x,
          event.y,
          canvas.itemcget('polygon1', 'state'),
          canvas.itemconfigure('polygon1', 'state'))


canvas.bind('<Motion>', motion)
canvas.pack()

master.mainloop()
...