Как получить имя виджета холста из команды? - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать всплывающие меню, которые частично определяются виджетом, в котором он был открыт. Я не могу найти способ найти виджет, на котором открыто меню. Например:

.f.canvas bind all <3> {
  puts stderr "%W just gives me '.f.canvas'"
}

Имя виджета будет использоваться для поиска в другой таблице для изменения свойств объекта, связанного с конкретным виджетом.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

При поиске некоторых других вещей в документации Tk для canvas я наткнулся на тег current :

Тег текущий управляется автоматически Tk; это относится к текущий элемент , который является самым верхним элементом, чья нарисованная область покрывает положение курсора мыши (различные типы элементов интерпретируют это в разные способы; подробности см. в документации по отдельным типам элементов) Если мышь находится не в виджете холста или над элементом, ни у одного элемента нет текущего тега.

Пример использования:

.f.canvas bind all <3> {
  puts stderr "widget [%W find withtag current] says hello"
}
0 голосов
/ 01 мая 2018

Попробуйте

.f.canvas bind all <3> {
    puts stderr [%W find closest %x %y]
}

Должен отображаться идентификатор элемента, на который вы щелкнули.

...