Как я могу контролировать кнопки Tkinter, когда Python занят? - PullRequest
2 голосов
/ 07 декабря 2010

Я разрабатываю приложение Python 2.7.1 / Tkinter 8.4 для Windows XP, которое проверяет несколько строк ввода из порта RS-232. Однако, если вход не поступает, он будет постоянно находиться в цикле.

Я пытаюсь внедрить кнопку «Abandon Test» в GUI, но поскольку основной поток занят ожиданием ввода, он не отображается при каждой проверке, была ли нажата кнопка. Я пробовал update_idletasks () и time.sleep (1) безуспешно.

Есть предложения?

1 Ответ

5 голосов
/ 07 декабря 2010

Tk однопоточный, поэтому, если основной поток занят, графический интерфейс будет зависать. Одним из решений является использование отдельного потока для чтения, поэтому, когда чтение блокируется, ваш основной поток может продолжаться. Когда вы получаете строку ввода, вы можете поместить ее в очередь, которая отслеживается основным потоком.

Другой способ - выяснить, как выполнять неблокирующее чтение на вашем последовательном порту. Если есть данные, прочитайте их. Если нет, вернитесь в основной цикл событий. Затем вам нужно сконфигурировать цикл обработки событий для опроса вашего порта каждые несколько сотен миллисекунд или около того, в зависимости от ваших требований к производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...