为了账号安全,请及时绑定邮箱和手机立即绑定

PyQt4在线程中等待来自GUI的用户输入

PyQt4在线程中等待来自GUI的用户输入

ibeautiful 2019-10-21 14:56:50
我有一个线程类“ 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作为inty作为str该信号传输数据块。您还必须更改该插槽接收的信号:mySignal = pyqtSignal(int, str)

查看完整回答
反对 回复 2019-10-21
?
12345678_0001

TA贡献1802条经验 获得超5个赞

不确定它在PyQt中的状态如何,是否可以在内部处理,但是在Qt C ++中,当您不清理对象并调用退出线程时,一旦停止应用程序线程被过早破坏,您将收到警告。我也不确定是否将动态分配的QObject(即使它是在C ++下的PyQt)移动到QThread也会使该QThread对象成为父对象。如果不是这种情况,我们会发生内存泄漏(再次-底层C ++在这里讨论)

查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 797 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信