У wx (и wxPython) есть два события, которые я пропускаю в PyQt:
EVT_IDLE
это отправляется во фрейм. Может использоваться для обновления различных виджетов в соответствии с состоянием приложения
EVT_UPDATE_UI
это отправляется виджету, когда его нужно перекрасить и обновить, чтобы я мог вычислить его состояние в обработчике
Теперь у PyQt их нет, и книга PyQt предлагает написать метод updateUi
и вызвать его вручную. Я даже заканчивал тем, что вызывал его из таймера один раз в 0,1 секунды, чтобы избежать многих ручных вызовов методов, которые могут обновить GUI. Я что-то пропустил? Есть ли лучший способ добиться этого?
Пример: у меня есть простое приложение с кнопкой «Пуск», которое инициирует некоторую обработку. Кнопка запуска должна быть включена только тогда, когда файл был открыт с помощью меню. Кроме того, в строке состояния есть постоянный виджет, отображающий информацию.
У моего приложения есть состояния:
- Перед открытием файла (в этом состоянии строка состояния показывает что-то особенное, а кнопка запуска отключена)
- Файл был открыт, а обработка не началась: кнопка пуска активирована, в строке состояния отображается что-то еще
- Обработка выполняется: кнопка пуска теперь говорит «Стоп», а строка состояния сообщает о прогрессе
В Wx, я бы хотел, чтобы событие обновления пользовательского интерфейса кнопки обрабатывало ее состояние: текст на нем и его включение, в зависимости от состояния приложения. То же самое для строки состояния (или я бы использовал EVT_IDLE для этого).
В Qt мне нужно обновить кнопку несколькими методами, которые могут повлиять на состояние, или просто создать метод update_ui и периодически вызывать его в таймере. Какой более QT-иш-способ?