Как настроить виджет Tkinter из отдельного класса?

Я пишу программу Tkinter, для которой требуется цикл. Я не могу запустить цикл из того же класса, в котором находится Tkinter, я в этом уверен. Я считаю, что для запуска указанного цикла мне нужно использовать отдельный поток, а значит, и отдельный класс, чтобы Tkinter не зависал. Я заставил Tkinter работать, пока цикл в потоке печатает числа. Однако мне нужно, чтобы он настроил окно Tkinter, которое находится в другом классе. Как бы я это сделал?


person SaxSalute    schedule 09.06.2011    source источник


Ответы (1)


Вам не обязательно нужен другой поток, потому что вам не обязательно создавать цикл (см. мой ответ на другой ваш вопрос об использовании вложенного цикла).

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

Пример использования потоков и очередей с Tkinter см. в разделе Tkinter и потоки на сайте effbot. шар. Обратите особое внимание на то, как он использует after для опроса очереди каждые 100 мс.

person Bryan Oakley    schedule 09.06.2011