簡體   English   中英

如何在功能結束之前讓Items顯示在QListWidget中?

[英]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

不要處理用戶輸入事件,例如ButtonPressKeyPress 請注意,事件不會被丟棄; 它們將在下次調用processEvents()且沒有ExcludeUserInputEvents標志的情況下ExcludeUserInputEvents

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM