在Qt Designer中为我们提供了一些基本的信号槽方法,我们来看看:
点击工具栏上的“编辑信号/槽”,进入信号槽编辑模式,我们可以直接在发送者(button)上按住鼠标左键不放,拖动到接收者(Form窗体)上。这样就建立起了连接。
接着,会弹出配置连接对话框。
左边是发送者(按钮)的信号(动作事件),右边是接收者(窗体)的槽(动作事件)
如图所示,我信号选择的是clicked,槽选择的是close
我们看一下编译后生成的代码:
self.quitButton.clicked.connect(Form.close)
实现的功能是:当按钮点击之后关闭窗体。
流程:按钮是信号发送者,当点击按钮之后会发送一个信号出去,通过这段代码程序内部的通讯机制知道这个按钮的点击事情被连接到窗体的关闭事件上去了,然后通知接受者窗体,你该运行槽函数close了!
那么我们怎么能执行自己的“槽”呢?
from PyQt5 import QtWidgets from untitled import Ui_Form class mywindow(QtWidgets.QWidget,Ui_Form): def __init__(self): super(mywindow,self).__init__() self.setupUi(self) self.myButton.clicked.connect(self.myPrint) #槽函数不用加括号 def myPrint(self): #定义槽 print("helloWorld") if __name__=="__main__": import sys app=QtWidgets.QApplication(sys.argv) myshow=mywindow() myshow.show() sys.exit(app.exec_())
槽其实就个函数(方法),Qt5中的槽函数不在限定必须是slot,可以是普通的函数、类的普通成员函数、lambda函数等。编译期间就会检查信号与槽是否存在!
信号的connect连接最好放在__init__析构函数里面,这样只会声明一次连接,如果在类方法(函数中)使用的话,要记得disconnect,否则connect会连接多次,导致程序异常。
信号槽函数不用加 (),否则可能会导致连接异常。
原文:http://blog.csdn.net/a359680405/article/details/45148717