Самый простой способ заставить кнопку вести себя так, как она нажата, - это использовать invoke
метод:
.hello.ok invoke
Конечно, тогда вам также нужно захватитьрезультат этого вызова;запись в stdout не является самой полезной вещью в мире, когда дело доходит до тестирования (если вы не завернули тестовый жгут в другой процесс и… ну, давайте просто оставим это как гораздо большую работу).Здесь очень поможет реструктуризация вашего кода, чтобы вы могли использовать другой бэкэнд при тестировании части графического интерфейса.
Также возможно опускаться ниже уровня вызовов методов до точки, с которой вы начинаетефальшивые события с event generate
.Это намного больше работы, потому что вы не можете просто генерировать щелчки мыши и нажатия клавиш;Вы также должны синтезировать события <Enter>
и <FocusIn>
, чтобы виджеты Tk правильно вооружались.Вот пример (-when tail
помещает событие в конец очереди событий):
event generate .hello.ok <Enter> -when tail
event generate .hello.ok <ButtonPress-1> -when tail
event generate .hello.ok <ButtonRelease-1> -when tail
Вы даже можете перейти к точке генерации событий, расположенных относительно верхнего уровня или всего корневого окна (хотяTk будет доставлять их только внутренне, он не будет отправлять события другим приложениям, поскольку это было бы довольно грубо), но я советую оставлять позиции, если вам не нужны , поскольку они делают ваш код очень хрупким для(как правило, неважно) такие вещи, как подробные изменения шрифтов.
Удачи в тестировании вашего GUI.Это трудно сделать хорошо.Создание вашего кода таким образом, чтобы графический интерфейс был отделен от серверной части путем передачи сценариев для настройки в качестве аргументов, где это уместно (довольно тривиально, чтобы сделать в Tcl, и эквивалентно таким вещам, как «издевательство», сделанное на других языках), очень поможетмешает вам проверить все сразу.Это поможет вам оставаться в здравом уме.