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
以前-好记性不如烂笔头
现在-好记性不如烂键盘