2013-12-20 5 views
-1

У меня есть 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)
+0

Ваши требования кажутся противоречащими друг другу. В чем разница между «не отвечать» и «заблокирована»? И каково было бы выполнение запроса в отдельном потоке, а также как блокирование пользовательского интерфейса с помощью окна сообщения (последнее, похоже, преследует цель первого)? – ekhumoro

+0

Разница заключается в том, что я хочу сделать окно заблокированным, не делая его «все белым» и без отображения Windows «не отвечает» в заголовке окна и сообщает пользователю о том, что программа перестала отвечать, и если он должен подождать или выйти. И именно поэтому я хочу запустить код в отдельном потоке, чтобы окна не переставали отвечать на запросы, и я могу сам его заблокировать другими способами, например, с помощью QMessageMox или как предлагалось QProgressDialog или скрывать содержимое. , –

ответ

0

В зависимости от времени, которое требуется, чтобы завершить сделку.

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

Смежные вопросы