pyqt5 在非主線程(QThread線程)中實現彈窗QMessageBox


今天編輯工具遇到一個問題,查詢資料得到解決辦法,記錄一下。

Qt將所有GUI(圖形用戶界面)相關的處理都限制在主線程中,這么做有助於防止意想不到的訪問沖突產生,但也限制了線程中某些簡單的UI交互的實現,比如QMessageBox。

因為QMessageBox必須在主線程中打開,想在QThread中使用QMessageBox可用信號量

class Window(QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        super(Window,self).__init__(parent)
        self.setupUi(self)
 
        self.message = message(self)
        self.message.signal.connect(self.box)
 
        self.pushButton.clicked.connect(self.message.start)
 
 
    def box(self):
        QMessageBox.information(self, 'Warning', 'Success', QMessageBox.Ok)
 
 
class message(QThread):
    signal = pyqtSignal() def __init__(self, Window):
        super(message, self).__init__()
        self.window = Window
 
    def run(self):
        self.signal.emit() if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

 參考:

 https://www.freesion.com/article/7333105480/

https://blog.csdn.net/JohnYork/article/details/46419185


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM