传递参数到一个PyQt线程启动时问题,怎么解决

传递参数到一个PyQt线程启动时问题,怎么解决,第1张

pyqt的线程之间的通信是通过信号to槽来实现的,首先你在线程类里面声明一个全局槽比如:

class imThread(QtCore.QThread):imslot = QtCore.pyqtSignal()

这里是要重点注意,上面的是没有任何参数的一个信号,如果你需要参数的话,你可以在里面添加参数类型,例如:

imslot1 = QtCore.pyqtSignal(str)#这是一个带字符串参数的信号imslot2 = QtCore.pyqtSignal(int)#这是一个带整型参数的信号imslot3 = QtCore.pyqtSignal(bool) #这是一个带布尔参数的信号

当然了,如果你需要多个参数的话,同样地往里面加就是了,qt也没有要求参数必须是同类型的,所以可以这样:

imslot1 = QtCore.pyqtSignal(str, int)#这是一个带整型和字符串的参数信号imslot2 = QtCore.pyqtSignal(int, str, str)#这是一个带整型和两个字符串的参数信号imslot3 = QtCore.pyqtSignal(bool, str) #这是一个带布尔和字符串的参数信号

在线程的run方法里面来定义执行信号:

1

self.imslot.emit()

这里也是需要重点注意的是,上面这个接口是没有参数的,如果你是要参数的话,是需要这样写:

self.imslot1[str].emit('hello')self.imslot2[int].emit(1)self.imslot3[bool].emit(False)

多参数的是这样

self.imslot1[str, int].emit('hello', 1)self.imslot2[int, str, str].emit(1, "hello", "world")self.imslot3[bool, str].emit(False, 'hello')

以上就是在线程类里面完成信号定义了,接下来就是逻辑层成定义一个函数槽来连接线程类里面的信号,这个也很简单,比如我在主线程类里面定义一个方法:

def imSlot():print 'ok'

以上这个是槽函数,接下来是实现信号槽的连接

imThread.imslot.connect('imSlot')

这个就是信号槽的连接方式,当然了,这个是没有参数的一个信号槽,那么带参数的怎么写呢?也很简单!首先定义一个槽函数:

def imSlot(para):print para

这个是带参数的槽函数,下面是:

imThread.imslot[str].connect('imSlot')

以上就是线程之间的方法了,子线程在执行的通行经过执行信号的话,子线程可以安全地执行而不会出现GUI主线程卡死的情况了。

1.定义一个信号:使用pyqtSignal进行信号定义,如signal = pyqtSignal(str),表示该信号包含内容都是一个字符串

2.连接信号与槽:signal.connect(get_slot),其中get_slot为接收信号的槽函数

3.发送信号:signal.emit(“hello world!”)

 #pushButton按下后,具体 *** 作内容在函数on_button_clicked中实现

self.pushButton.clicked.connect(self.on_button_clicked)  

def on_button_clicked(self):

        print("clicked!")

写在最后:文章是在学习过程中做的学习笔记,同时与志同道合者分享,文章内容均经过我自己实验证实可行,如有问题欢迎留言,很高兴一起交流讨论,共同进步!

"""

【简介】

内置信号槽示例

"""

from PyQt5.QtCore import QObject, pyqtSignal

class QTypeSignal(QObject):

# 定义一个信号

sendmsg = pyqtSignal(object)

class QTypeSlot(QObject):

def init (self):

super(QTypeSlot, self). init ()

if name == ' main ':

send = QTypeSignal()

slot = QTypeSlot()

# 1

print('--- 把信号绑定到槽函数 ---')

send.sendmsg.connect(slot.get)

send.run()

from PyQt5.QtCore import QObject , pyqtSignal

class QTypeSignal(QObject):

#定义一个信号

sendmsg = pyqtSignal( str,str)

class QTypeSlot(QObject):

def init ( self):

super( QTypeSlot, self). init ()

if name == ' main ':

send = QTypeSignal()

slot = QTypeSlot()


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

原文地址:https://54852.com/bake/11601515.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存