2013-12-20 54 views
-1

我有一個包含數千個複選框的Q.Widget,它們從數據庫獲取數據,並在按下保存按鈕後將數據發回給它。在查詢期間鎖定PySide(QT)窗口

當點擊保存按鈕時,由於發送到數據庫的數據量很大,應用程序會「無響應」,直到事務終止,這是一種正常的行爲,因爲PySide(QT)鎖定了一切直到回調函數結束。 但是我發現這種行爲「不專業」。

我想要做的就是鎖定所有內容(因此在查詢過程中不能修改複選框的狀態),但是沒有應用程序進入「無響應」模式。

我想過在單獨的線程中運行查詢並顯示只在查詢結束時關閉的Q.MessageBox(會自動鎖定Q.Widget),但我想知道是否有任何方法來鎖定Q.Widget不顯示消息框,而是在窗口的狀態欄上顯示狀態消息,或者作爲最後的手段,只需鎖定Q.Widget(無需在狀態欄中顯示消息)而無需使用它進入「無響應」模式。

此外,將所有複選框設置爲禁用不是可接受的選項。

系統配置:

  • 視窗7 64位
  • 的Python 3.3(通過窗戶安裝安裝程序)
  • PySide模塊1.2.1(通過窗戶的安裝程序安裝)數據庫:
  • PostgreSQL的9.3 .1(通過Windows安裝程序(EntrepriseDB)安裝)
  • psycopg2模塊(用於與數據庫通信)(通過Windows安裝程序安裝 )
  • Python編輯:PyCharm社區版3.0.2
+0

你的要求似乎是矛盾的。 「不響應」和「鎖定」之間有什麼區別?在單獨的線程中運行查詢以及如何用消息框鎖定UI(後者似乎擊敗了前者的目的)會是什麼? – ekhumoro

+0

區別在於我想讓窗口鎖定而不會出現「全白」,並且沒有窗口在窗口標題上顯示「無響應」,並告訴用戶程序停止響應以及是否應該等待或退出。這就是爲什麼我想在一個單獨的線程中運行代碼,以便窗口不會「停止響應」,並且我可以通過其他方式(如QMessageMox或QProgressDialog或隱藏內容)自行阻止它。 。 –

回答

0

(通過Windows安裝程序安裝)依賴於它需要完成交易的時間。

但你描述的方式,我會去一個QProgressDialog - 這將帶給用戶最好的體驗,如果你設置它的方式正確,你將鎖定該UI以及