Можно ли перенести основной цикл программы из GUI? - PullRequest
2 голосов
/ 27 января 2011

Я использую python 3 / tkinter, если это имеет значение.

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

Но моё моделирование выполняется независимо от взаимодействия с пользователем; пользовательский интерфейс предназначен для того, чтобы время от времени видеть, что происходит в симуляции, но он не контролирует то, что происходит в симуляции. Поэтому я бы хотел, чтобы основной цикл был связан с симуляцией, а не с пользовательским интерфейсом. Как бы я это сделал?

Ответы [ 3 ]

2 голосов
/ 27 января 2011

Почему бы не отделить вашу логику и представление. Напишите свой бэкэнд-сим для ответа на один текстовый протокол для получения cmds и отправки результатов, а затем просто поговорите с ним из вашей графической программы, например, по адресу. Unix сокеты.

1 голос
/ 27 января 2011

В этом случае вы должны выполнить обработку в отдельном потоке, а затем поток GUI отправлять и получать сообщения в этот поток.

Однако не пытайтесь напрямую обновлять графический интерфейс из потока обработки. Вместо этого вы можете отправить сообщение в графический интерфейс, используя очередь сообщений, аналогично примеру effbot . Важным моментом является queue.get_nowait(): вы можете просто периодически запускать это в своем графическом интерфейсе, не блокируя другие потоки, если в очереди ничего нет.

1 голос
/ 27 января 2011

Напишите свой собственный главный цикл, который вызывает функции, которые проверяют и обрабатывают события графического интерфейса.

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