Допустим, я создал холст в приложении Tkinter.
На холсте я нарисовал несколько прямоугольников.
По сути, я хочу знать, в каком прямоугольнике щелкнул пользователь, это мое главное беспокойство, но это то, что я пробовал, и, как мне кажется, может быть решением.
Это мой макет:
for x in range(1,6):
for y in range(1,7):
tableNumber = y + 6*(x-1)
w.create_rectangle((table.xSeparation + table.width) * y - table.width,
(table.ySeparation + table.height) * x - table.height,
(table.xSeparation + table.width)*y,
(table.ySeparation + table.height) * x,
fill="brown", tags="table" + str(tableNumber))
w.tag_bind("table" + str(tableNumber), '<Button-1>', do)
Так что это просто создает прямоугольники в расположении строк и столбцов.
Каждый прямоугольник имеет определенный тег в виде table1
, table2
до table30
.
Когда я нажимаю на прямоугольник, запускается функция do
.
Допустим, что-то было что-то вроде:
def do(event):
print "click"
Не я получаю «щелчок» в консоли за каждый щелчок в прямоугольнике.
Я бы хотел иметь возможность получить метку прямоугольника, по которому щелкнули, чтобы сделать что-то вроде этого:
def do(event):
print str(theTagOfTheClickedRectangle)
Итак, я проверил, какие события я могу назвать:
- виджет
- х, у
- x_root, y_root
- символ
- 1039 * символ клавиши *
- скан
- Num
- ширина, высота
- тип
Кажется, ни один из пунктов не указывает, на какой прямоугольник я нажал.
Я думал о добавлении дополнительных параметров к функции do
здесь:
w.tag_bind("table" + str(tableNumber), '<Button-1>', do(event, tag))
Но, похоже, это не работает нормально, но, может быть, я не правильно делаю do
:
do(event, tag): #this doesn't work at all!!
print event.x
print tag
Надеюсь, вопрос ясен, если я получу метку таким же образом, как я могу получить 'x' и 'y' события, это будет очень удобно.
Единственное реальное решение, о котором я могу сейчас подумать, - это вычисление математики для «event.x» и «event.y» и вычисление, основываясь на координатах клика, на каком прямоугольнике щелкнул пользователь, это кажется слишком сложным для того, что я пытаюсь сделать, хотя я делал это раньше, и это, очевидно, работает.
Надеюсь, вопрос ясен, в противном случае, пожалуйста, попросите разъяснений.
Обратите внимание, что я не привязан к какому-либо из этого кода, скорее, я ищу решение этой проблемы, наиболее эффективный будет работать, даже если это означает, что не работают с тегами, или виджетом другого типа или чем-то еще тем легче.