python槽函数 python槽函数参数传递

python线程间通信的问题,回答有加分!300

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方法里面来定义执行信号:

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主线程卡死的情况了。

Python需要disconnect信号吗

在使用信号调用disconnect()方法断开信号和槽的连接时,信号可以带签名也可不带签名,参数可以没有也可以有一个,这些组合情况下disconnect的处理是不同的,具体情况如下:

?1.PyQt5.14的官网上介绍说如果参数为空,表示信号连接的所有槽都会断开,这句话是有歧义的,只是断开所有与信号签名匹配的槽,如果调用时信号不带签名,则默认断开第一个签名对应的所有槽;

?2.如果断开时信号带签名,参数为槽函数,但二者不匹配时则会引发异常;

?3.如果断开时信号带签名,参数为connection对象,断开的是与签名匹配的连接信号和槽,不按参数进行连接断开;

?4.如果断开时信号不带签名,参数为connection对象,则按connection对象断开连接。

python pyqt5 自定义信号和槽

"""

【简介】

内置信号槽示例

"""

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()

PYQT设计完成,如何用python检测事件?

答: 可以将事件连接到槽函数,然后在槽函数里面设置相关内容。这样的话每次事件触发时,槽函数里面的内容就可以执行,根据内容也就可以判断知道哪个事件被触发了。信号绑定槽函数的方法有如下所示。

就比如说你要捕获按钮的点击事件(clicked),当按钮(定义为btn)被点击后,我们调用一个on_click函数(这是我们自己定义的),那么最后的代码就是这样btn.clicked.connect(on_click),就可以把按钮的点击事件与槽函数相连。


网页标题:python槽函数 python槽函数参数传递
标题URL:http://azwzsj.com/article/hjeoso.html