У меня есть Q.Widget с тысячами флажков, которые получают данные из базы данных и отправляют данные обратно после нажатия кнопки сохранения.Блокировка окна PySide (QT) во время запроса
При нажатии кнопки сохранения из-за огромного объема данных, отправляемых в базу данных, приложение «не отвечает» до тех пор, пока транзакция не будет прекращена, что является нормальным поведением, поскольку PySide (QT) блокирует все пока функция обратного вызова не завершится. Однако я нахожу это поведение «непрофессиональным».
Что я хочу сделать, это заблокировать все (поэтому никаких изменений в состоянии флажков во время запроса не может быть сделано), но без применения приложения в режиме «без ответа».
Я думал о запуске запроса в отдельном потоке и отображении Q.MessageBox (который автоматически блокирует Q.Widget), который закрывается только после завершения запроса, но мне интересно, есть ли способ блокировки Q.Widget, не отображая окно сообщения и отображая сообщение о состоянии в строке состояния окна, или в качестве последнего средства просто блокирует Q.Widget (нет необходимости, чтобы сообщение отображалось в строке состояния), не имея его перейти в режим «не отвечающий».
Кроме того, установка всех отключенных флажков не является приемлемым вариантом.
конфигурациисистема:
- для Windows 7 64-бит
- Python 3.3 (устанавливается через окна программы установки)
- PySide модуль 1.2.1 (устанавливается через установщик Windows) База данных:
- PostgresSQL 9,3 .1 (устанавливается через установщик Windows (EntrepriseDB))
- модуль psycopg2 (для связи с базой данных) (установлен через установщик окон)
- Python редактор: PyCharm Community Edition 3.0.2 (устанавливается через Windows Installer)
Ваши требования кажутся противоречащими друг другу. В чем разница между «не отвечать» и «заблокирована»? И каково было бы выполнение запроса в отдельном потоке, а также как блокирование пользовательского интерфейса с помощью окна сообщения (последнее, похоже, преследует цель первого)? – ekhumoro
Разница заключается в том, что я хочу сделать окно заблокированным, не делая его «все белым» и без отображения Windows «не отвечает» в заголовке окна и сообщает пользователю о том, что программа перестала отвечать, и если он должен подождать или выйти. И именно поэтому я хочу запустить код в отдельном потоке, чтобы окна не переставали отвечать на запросы, и я могу сам его заблокировать другими способами, например, с помощью QMessageMox или как предлагалось QProgressDialog или скрывать содержимое. , –