Проблема с tk_messageBox во время сценария инициализации Tcl / Tk - PullRequest
0 голосов
/ 16 января 2010

С помощью следующего сценария Tcl виджет ввода не будет принимать ввод. Появляется, но не отвечает.

pack [entry .a] -padx 15 -pady 15
tk_messageBox -message {test}

Если я закомментирую строку tk_messageBox, то виджеты ввода будут работать нормально. Что вызывает такое поведение и как я могу это исправить?

Я использую Tcl / Tk 8.5.2 в Windows.

Чтобы уточнить, моя проблема в том, что поле ввода не работает после закрытия окна сообщения. Поле ввода не будет принимать фокус / ввод и не будет отображать каретку. Я протестировал это на Windows XP и Vista, используя Tcl / Tk, который я скомпилировал сам, и с tclkit из Equi4 . В каждом случае запись не работает, если в сценарии инициализации отображается окно сообщения.

Редактировать: еще одна вещь. Эта «ошибка» отсутствует, если код введен в интерактивную консоль пожеланий. Кажется, что он не работает, только когда код находится в файле, а желание вызывается из командной строки с именем файла в качестве аргумента.

Ответы [ 4 ]

0 голосов
/ 04 февраля 2010

Видимо, это ошибка в Tk.

Простое исправление - поставить

update idletasks

в качестве первой строки кода в скрипте инициализации.

0 голосов
/ 20 января 2010

Похоже на типичную проблему фокусировки. Я протестировал в своей системе, и следующий скрипт, кажется, работает нормально:

pack [entry .a] -padx 15 -pady 15
tk_messageBox -message {test} focus
focus -force .a

Всякий раз, когда у вас возникают проблемы такого типа, думайте, что фокус может исчезнуть, и вам нужно его восстановить. Проверьте команды фокусировки и захвата.

Надеюсь, это поможет.

0 голосов
/ 21 января 2010

Я попробовал 3-строчный пример tcl / tk с tclkit 8.5.8 на Windows XP, и он работал так, как и следовало ожидать.Помните, что tk 8.x использует все больше и больше нативных виджетов Windows, и взаимодействие между ними и виджетами tk only иногда может быть затруднено.

0 голосов
/ 16 января 2010

Окно сообщения является модальным, то есть оно захватывает фокус ввода до его закрытия. Вам нужно будет показать свое сообщение по-другому, если вы хотите, чтобы ваше приложение оставалось отзывчивым, пока оно открыто.

...