PyQt4调用partial函数绑定多个信号到相同slot源码实例
来源:互联网 发布:windows高级编程 编辑:程序博客网 时间:2024/06/05 02:10
PyQt4.3包含4.3操作的实例源码,本人是4.8.7:
#coding=utf8'''把一个button的clicked()信号连接到一个响应信号的方法可能是最常见的连接场景。但是如果大多数处理是相同的,只需要一些参数化即可确定哪个特定按钮被按下。在这样的情况下,通常的做法是把没法button连接相同的slot。这里有两种实现方法:1》使用partial(局部)函数来包装一个带有参数的插槽(slot),这样当调用插槽(slot)时,它将对按钮进行参数化。2》通过PyQt告诉我们那个按钮调用slot(插槽)这两种方法,在该实例中都有演示。'''import sys'''如果python的版本小于2.5,这时可以使用functools.partial()函数或着用户自己创建的函数partial()函数;否则,从functools模块中导入partial.通过partial()把一个slot和一个button名绑定在一起。'''if sys.version_info[:2]<(2,5): def partial(func,arg): def callme(): return func(arg) return callmeelse: from functools import partialfrom PyQt4.QtCore import *from PyQt4.QtGui import *class Form(QDialog): def __init__(self,parent=None): super(Form,self).__init__(parent) #创建一个水平布局容器 #用来容纳button和label hblayout=QHBoxLayout() oneBtn=QPushButton("One") twoBtn=QPushButton("Two") threeBtn=QPushButton("Three") fourBtn=QPushButton("Four") fiveBtn=QPushButton("Five") self.messageLabel=QLabel("No button is clicked") hblayout.addWidget(oneBtn) hblayout.addWidget(twoBtn) hblayout.addWidget(threeBtn) hblayout.addWidget(fourBtn) hblayout.addWidget(fiveBtn) hblayout.addWidget(self.messageLabel) #调用partial函数把信号和slot绑定在一起 #如下方法在PyQt版本号4.3之前是无法使用的 #绑定函数在connect()调用时创建,但是在connect()调用完成后 #绑定函数不在范围内,然后被释放。 #从PyQt4.3(包括4.3)之后,当它们被用作如下代码所示的连接时, #通过functools.partial()创建的绑定被特别对待。 #这意味着被连接的函数将不会被垃圾回收机制回收,所以下面所示的连接代码能正常使用。 self.connect(oneBtn, SIGNAL("clicked()"),partial(self.anyButton, "One")) self.connect(twoBtn, SIGNAL("clicked()"),partial(self.anyButton, "Two")) self.connect(threeBtn, SIGNAL("clicked()"),partial(self.anyButton, "Three")) self.connect(fourBtn, SIGNAL("clicked()"),partial(self.anyButton, "Four")) self.connect(fiveBtn, SIGNAL("clicked()"),partial(self.anyButton, "Five")) self.setLayout(hblayout) #创建点击信号发射时的响应函数 def anyButton(self,buttonName): self.messageLabel.setText("You click button '%s'" %buttonName) if __name__=="__main__": app=QApplication(sys.argv) form=Form() form.show() app.exec_()
对于PyQt4.0,4.1,4.2实例源码如下:
#coding=utf8'''把一个button的clicked()信号连接到一个响应信号的方法可能是最常见的连接场景。但是如果大多数处理是相同的,只需要一些参数化即可确定哪个特定按钮被按下。在这样的情况下,通常的做法是把没法button连接相同的slot。这里有两种实现方法:1》使用partial(局部)函数来包装一个带有参数的插槽(slot),这样当调用插槽(slot)时,它将对按钮进行参数化。2》通过PyQt告诉我们那个按钮调用slot(插槽)这两种方法,在该实例中都有演示。'''import sys'''如果python的版本小于2.5,这时可以使用functools.partial()函数或着用户自己创建的函数partial()函数;否则,从functools模块中导入partial.通过partial()把一个slot和一个button名绑定在一起。'''if sys.version_info[:2]<(2,5): def partial(func,arg): def callme(): return func(arg) return callmeelse: from functools import partialfrom PyQt4.QtCore import *from PyQt4.QtGui import *class Form(QDialog): def __init__(self,parent=None): super(Form,self).__init__(parent) #创建一个水平布局容器 #用来容纳button和label hblayout=QHBoxLayout() oneBtn=QPushButton("One") twoBtn=QPushButton("Two") threeBtn=QPushButton("Three") fourBtn=QPushButton("Four") fiveBtn=QPushButton("Five") self.messageLabel=QLabel("No button is clicked") hblayout.addWidget(oneBtn) hblayout.addWidget(twoBtn) hblayout.addWidget(threeBtn) hblayout.addWidget(fourBtn) hblayout.addWidget(fiveBtn) hblayout.addWidget(self.messageLabel) #调用partial函数把信号和slot绑定在一起 #对于PyQt4.0,4.1,4.2,任然能使用partial(): #首先,需要创建一个绑定的引用(只有在connect()被调用时使用该引用) #其次,把该应用作为Form实例的一个属性,确保在form存在时, #绑定函数没有超出使用范围,是的绑定函数任然可以使用。 #所以连接函数调用可以像下面这么使用 ''' self.oneBtnClic= partial(self.anyButton, "Two") self.connect(oneBtn, SIGNAL("clicked()"),self.oneBtnClic) self.twoBtnClic= partial(self.anyButton, "Two") self.connect(twoBtn, SIGNAL("clicked()"),self.twoBtnClic) self.threeBtnClic= partial(self.anyButton, "Three") self.connect(threeBtn, SIGNAL("clicked()"),self.threeBtnClic) self.fourBtnClic= partial(self.anyButton, "Four") self.connect(fourBtn, SIGNAL("clicked()"),self.fourBtnClic) self.fiveBtnClic= partial(self.anyButton, "Five") self.connect(fiveBtn, SIGNAL("clicked()"),self.fiveBtnClic) ''' self.setLayout(hblayout) #创建点击信号发射时的响应函数 def anyButton(self,buttonName): self.messageLabel.setText("You click button '%s'" %buttonName) if __name__=="__main__": app=QApplication(sys.argv) form=Form() form.show() app.exec_()
运行结果截图:
0 0
- PyQt4调用partial函数绑定多个信号到相同slot源码实例
- PyQt4一个button对应一个slot(插槽)实例源码讲解
- 关于多个信号链接到相同槽函数区分信号发出者
- PyQt4的信号与插槽中简单实例源码讲解
- PyQt4 实例源码阅读
- 绑定多个函数到window.onload
- 多个dll导出相同函数时的调用问题
- 同一元素上,通过v-on绑定多个相同事件的函数
- libevent源码学习-----统一事件源及信号绑定函数
- PyQt4创建一个dump对话框实例源码
- QT程序实例----信号与插槽(signal and slot)
- QT出现重复调用SLOT函数
- jQuery一个元素绑定多个相同事件的解决
- android关于多个控件绑定相同事件的问题
- jquery多个相同ID动态绑定同一事件
- qt#2 多个实例信号版定一个槽函数如何识别信号源
- 把多个JavaScript函数绑定到onload事件处理函数上
- [jtable]多个源码实例
- 最近C++开发过程中遇到的一些坑
- POJ 1132 Border 笔记
- 欢迎使用CSDN-markdown编辑器
- eclipse 和 androidstudio 快捷键对比
- 使用float浮动之后,父元素“塌陷”的解决办法
- PyQt4调用partial函数绑定多个信号到相同slot源码实例
- 阿里云ESC Nginx下为WordPress添加伪静态规则
- Spring Cloud微服架构之分布式配置中心
- Micropython加速物联网开发4
- 笔记-TF-IDF
- Java算法
- CRM的应用现状
- Java面试笔记(Java基础)
- css样式float造成的浮动“塌陷”问题的解决办法