为什么将QThread创建为局部变量会导致行为不同

为什么将QThread创建为局部变量会导致行为不同,第1张

为什么将QThread创建为局部变量会导致行为不同

要指出的问题是,这是一个局部变量,启动后会立即销毁它,因此将删除

QThread
QThread
(QThread不是线程,它是线程处理程序)处理的线程,并在使用
wait()
时可以预期该
run()
方法将被执行,但是在生成GUI的主线程中冻结。

因此解决方案是延长变量线程的寿命,一种指出它起作用的方式是:使其成为类的成员,但是还有另一种方法只能将QObjects作为QThread使用,并且传递父级(父对象必须是另一个QObject),它将把对象的寿命延长到与父对象相同的容量,因此我将使用一个对话框。

最后,如今不建议动态创建信号,最好将其创建为类的一部分,对于连接,还必须使用新语法。

class UI():    def __init__(self):        self.app = QtGui.QApplication(sys.argv)        self.dialog = QtGui.QDialog()        self.ui = Ui_Dialog()        self.ui.setupUi(self.dialog)        self.ui.btn.clicked.connect(self.btnclick)        self.dialog.show()    def btnclick(self):        thread = testThread(self.dialog)          thread.signal.connect(self.output)        thread.start()    def output(self, txt):        self.ui.logText.append(str(txt))class testThread(QtCore.QThread):    signal = QtCore.pyqtSignal(str)    def __del__(self):        self.wait()    def run(self):        for i in range(10): QtCore.QThread.sleep(1) self.output(str(i))    def output(self, txt):        self.signal.emit(txt)if __name__ == '__main__':    ui = UI()    app = QtGui.QApplication.instance()    if app is not None:        sys.exit(app.exec_())


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5642838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存