我有一个线程类“ MyThread”和我的主应用程序,简称为“ Gui”。我想从线程类创建一些对象,但在本示例中,我仅创建了一个对象。线程类完成一些工作,然后向Gui类发出信号,指示需要用户输入(此指示目前仅是更改按钮的文本)。然后线程应等待用户输入(在这种情况下为单击按钮),然后继续执行其操作...from PyQt4 import QtGui, QtCoreclass MyTrhead(QtCore.QThread): trigger = QtCore.pyqtSignal(str) def run(self): print(self.currentThreadId()) for i in range(0,10): print("working ") self.trigger.emit("3 + {} = ?".format(i)) #### WAIT FOR RESULT time.sleep(1)class Gui(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(Gui, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.btn) self.t1 = MyTrhead() self.t1.trigger.connect(self.dispaly_message) self.t1.start() print("thread: {}".format(self.t1.isRunning())) @QtCore.pyqtSlot(str) def dispaly_message(self, mystr): self.pushButton.setText(mystr) def btn(self): print("Return result to corresponding thread")if "__main__" == __name__: import sys app = QtGui.QApplication(sys.argv) m = Gui() m.show() sys.exit(app.exec_())如何在(多个)线程中等待用户输入?
3 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
将插槽装饰器更改为,@pyqtSlot( <arguments>)
后面跟随代表插槽的功能的相同签名def firstwork(self, <argument variables>)
。例如,@pyqtSlot(int, str)
意味着该插槽需要2个参数(类型之一int
和另一个str
)。该时隙装饰属于应类似功能def firstWork(self, x, y)
与x
作为int
和y
作为str
该信号传输数据块。您还必须更改该插槽接收的信号:mySignal = pyqtSignal(int, str)
。
12345678_0001
TA贡献1802条经验 获得超5个赞
不确定它在PyQt中的状态如何,是否可以在内部处理,但是在Qt C ++中,当您不清理对象并调用退出线程时,一旦停止应用程序线程被过早破坏,您将收到警告。我也不确定是否将动态分配的QObject
(即使它是在C ++下的PyQt)移动到QThread
也会使该QThread
对象成为父对象。如果不是这种情况,我们会发生内存泄漏(再次-底层C ++在这里讨论)
添加回答
举报
0/150
提交
取消