Я регулярно нахожу себя в диалоговом окне Tk, используя ttk :: entry widgets для запроса имени файла. Я сохраняю последний вход пользователя в таком диалоговом окне и отображаю его как значение по умолчанию при следующем его отображении.Отобразить хвост имени файла в поле ввода
После того, как я заполнил виджет, если полное имя файла больше, чем поле ввода, тогда оно отобразит самые левые несколько символов, которые, как правило, являются менее интересной частью имени файла, и я предпочел бы, чтобы он отображался справа персонажи.
Я обнаружил, что попытка использовать $entryWidget xview
сразу не работал очень хорошо - это не сделал ничего, что я предполагаю, был из-за какого-то состояния гонки - так что я принял к написанию
after $N $entryWidget xview moveto 1.0
Есть ли лучше путь, а если нет, то какой хороший выбор для N? Мне не нравятся магические числа, и, насколько я помню, after 0
не работал должным образом, и after idle
.
Вот пример, демонстрирующий проблему
package require Tk
set ent [ttk::entry .ent]
pack $ent -fill both -expand yes
$ent insert end "The quick brown fox jumps over the lazy dog"
after 1000 $ent xview moveto 1.0
set btn [ttk::button .btn -text Dismiss -command exit]
pack $btn -fill both -expand yes
Без after 1000
в строке 5 (?) Нет ошибок, и никакого эффекта. Если я попробую after 10
, эффекта не будет. Если я оставлю after n
и сделаю update idletasks; $ent xview moveto 1.0
, эффект не будет.
«Без эффекта» означает, что в диалоговом окне отображается «Быстрые коричневые прыжки лисицы», остальная часть строки скрыта. С кодом, как указано выше, он отображает это первоначально, но через секунду (как и ожидалось, действительно, как закодирован) он переключается на отображение «перепрыгивает через ленивую собаку», а остальное скрывается. Это нежелательно для пользователя, чтобы он мог видеть незашифрованный текст, но я не могу решить, как избежать его, кроме как выбрав волшебное число миллисекунд, чтобы подождать.
+1 Увлекательная проблема. Кажется, что не работает ни привязка к '