pyqt5-qthread 实现emit触发另一个函数

遇到的问题

想要通过后台的qthread 的线程,当其完成一些操作后,能够触发一些函数,执行一些另外的操作。

传统的触发方式如下:


class WorkThread(QThread):
    trigger = pyqtSignal()
 
    def __int__(self):
        super(WorkThread, self).__init__()
 
    def run(self):
        #这一部分就可以写入你想要执行的代码就好
        # print('开始执行了run')
        # for i in range(2000000000):
        #     pass
        # 
        # # 循环完毕后发出信号
        # print('1线程运行完了')
          self.trigger.emit()

通过设定的qthread emit 进行触发的结果。

通过主函数调用的写法

 def EquipmentCStopFunction(self):
        print('执行C物体停止功能开始')
 
        self.workThread=WorkThread()  #实例化一个线程对象
        self.workThread.trigger.connect(self.timeStop1)  #链接你执行完这个线程之后的想要触发的 函数的名字
        self.workThread.start()  #这个就是启动你的想要执行额线程,注意这个是start 而不是run
 
 
 
        self.workThread1 = WorkThread1()        #实例化一个线程对象
        self.workThread1.trigger.connect(self.timeStop2)#链接你执行完这个线程之后的想要触发的 函数的名字
        self.workThread1.start()  #这个就是启动你的想要执行额线程,注意这个是start 而不是run

结论

上面使用场景, 对于不传递参数是可用的,但是如果传递参数,该如何写???

如何传递参数

出现的问题

如果你直接写
self.trigger.emit(“hello i am done”)
这样是会出现报错的,因此,经过我不断的查询资料。

解决方法

在初始化trigger的时候,需要给定触发传输的类型。

示例代码

trigger=QtCore.pyqtSignal(str)

    def __init__(self):
        super().__init__()

        self.flagtcpforepics = True


    def run(self):

        # 通过触发不同的函数的去调用主线程中的函数,这个时候就是属于来自epics 的自动控制
        while True:
            if self.flagtcpforepics:
                print('in tcp receive part')

                self.filestr = "hhaha "
                self.trigger.emit(self.filestr)

主函数部分

        self.tcp_epics_thread = tcp_receiving_thread()
        self.tcp_epics_thread.trigger.connect(self.epics_autoprocess)
    def epics_autoprocess(self,msg):
        print('get the action in main',msg)

总结

本文给出了pyqt的qthread 的使用方法和如何通过emit 传递参数

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值