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

以前-好记性不如烂笔头 现在-好记性不如烂键盘
原文地址:https://www.cnblogs.com/gexbooks/p/14661743.html