[英]How can I have the icon items in my QlistWidget insert into the widget, or display, from top to bottom and not left to right?
[英]How can I get Items to show in my QListWidget before the end of the function?
我希望我的QListWidget
在添加新項目時進行更新,但僅在函數結束后才對所有項目進行更新。 我嘗試使用update()
和repaint()
,但是都沒有用。 我實際上不得不在Widget本身上使用repaint()
只是為了使其在結束之前顯示,但是沒有任何一項起作用。 這是要添加的第一項的簡要視圖:
def runPW10(self):
self.PWList.setVisible(True)
self.PWList.setEnabled(True)
# This repaint() has to be here for even the List to show up
self.PWList.repaint()
....
self.PWList.addItem('Executing Change Password Tool')
# This does not help
self.PWList.repaint()
....
該功能還有更多,但很長,應該包括所需的功能。 請讓我知道是否需要更多。
我做錯了什么,導致該列表在添加項目時不會更新?
添加QApplication.processEvents()
。
QCoreApplication.processEvents (QEventLoop.ProcessEventsFlags flags = QEventLoop.AllEvents)
根據指定的標志處理調用線程的所有未決事件,直到沒有更多事件可處理為止。
當程序忙於執行長時間的操作(例如,復制文件)時,可以偶爾調用此函數。
您的窗口小部件最初將顯示,但沒有響應。 為了使應用程序具有響應能力,每當添加項目時,都向其中一些添加processEvents()
調用。
請記住,這可能會影響性能提升不少 。 這使整個應用程序循環得以執行,包括所有排隊的事件。 不要將此添加到對性能敏感的循環中。
還應考慮到這允許您的用戶與應用程序進行交互,因此請確保不允許發生任何可能發生的交互somebutton.enabled(False)
例如somebutton.enabled(False)
或被優雅地處理(如“ Cancel
按鈕)以停止長時間的任務。
有關更多信息,請參見原始C ++文檔 ,因為pyqt
是直接端口。
要在這一點上完成Drise的答案:
還應考慮到這允許您的用戶與應用程序進行交互,因此請確保不允許發生任何可能發生的交互
somebutton.enabled(False)
例如somebutton.enabled(False)
或被優雅地處理(如“Cancel
按鈕)以停止長時間的任務。
您可能希望通過以下方式使用QEventLoop.ExcludeUserInputEvents
標志: QCoreApplication.processEvents(QEventLoop.ExcludeUserInputEvents)
刷新GUI,同時阻止用戶激活任何窗口小部件。
QEventLoop.ExcludeUserInputEvents
0x01
不要處理用戶輸入事件,例如
ButtonPress
和KeyPress
。 請注意,事件不會被丟棄; 它們將在下次調用processEvents()
且沒有ExcludeUserInputEvents
標志的情況下ExcludeUserInputEvents
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.