В TCL / TK удалить привязку после уничтожения виджета - PullRequest
0 голосов
/ 06 января 2020

У меня есть холст, расположенный в подокне моего основного приложения:

.dsm.nb.mdlbuild.canvas

дополнительно у меня есть следующее (одно из нескольких) pro c, помогающее пользователю перемещать вещи по canvas:

proc grab { xx yy } {

    global currentx currenty
    set currentx $xx
    set currenty $yy
}

Я использую эту привязку:

.dsm.nb.mdlbuild.canvas bind $tagtomove  <Button-1>      {grab  %x %y }

ПРОБЛЕМА:

Когда пользователь закрывает окно (.dsm), холст искажается, но привязка, кажется, «выживает».

Когда пользователь затем последовательно щелкает где-то, где он получает ошибку:

wrong args: should be "grab xx yy"

Это потому, что xx и yy пустые, я полагаю, потому что холст ушел вместе с окном parrent ...

Я пытался установить нулевую привязку после разрушения окна .dsm:

.dsm.nb.mdlbuild.canvas bind $tagtomove  <Button-1>      { }

и использовать команду "break", но с безуспешно.

.dsm.nb.mdlbuild.canvas bind $tagtomove  <Button-1>      break

Как убрать привязку uppon, закрывающую окно (.dsm), в котором находится холст, чтобы эта ошибка исчезла?

1 Ответ

3 голосов
/ 06 января 2020

Проблема, скорее всего, в том, что вы использовали имя стандартной команды Tk для своего профи c. Команда grab вызывается из разных мест в библиотеке Tk, но не всегда совпадает с числом аргументов вашего профи c. Это может привести к ошибке. Вы можете проверить это, сбросив значение $ errorInfo после того, как вы получили сообщение об ошибке.

Итак, просто переименуйте ваш pro c во что-то отличное от grab (или любую другую встроенную команду).

...