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