呆萌教你:使用Python 开发串口工具 4. 绑定信号与槽函数
🙈1. 关于信号与槽
- 信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
- 信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。
- 槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
🙈2. 信号与槽在QtDesigner的应用
2.1 砍掉上节遗留的小尾巴:重新命名控件
-
上节中,我们创建了窗口工具的主界面,为了让后面的代码清晰,我们需要先把创建的控件进行重命名。各个控件的名称在右侧“对象查看器”可以看到,选中界面的某个控件,右侧对应的控件就会被选中,双击后就可以命名。当前的命名情况如图:
-
为了方便后面代码的开发,我们需要定下命名规则。以下是我的命名,各位可以按照自己的喜好命名,简洁易懂即可:
Group Box:- 串口设置:com_setting
- 接收设置:receive_setting
- 发送设置:send_setting
- 发送按钮:send
- 接收框:receiver
- 发送框:sender
-
接下来,我们打开com_setting,对里面具体的控件进行命名:
-
打开receive_setting和send_setting标签,对里面的控件重命名:
-
其他控件的命名如下:
2.2 编辑信号/槽
- 点击如图所示的图标,进入“编辑信号/槽”:
- 左键单击“发送”按钮,不松并拖曳出一个类似“接地”的图标后松开鼠标:
- 弹出对话框,我们单击左侧“clicked”,再单击右侧下方“编辑”按钮添加槽函数。该操作的目的是:当我们“clicked”这个按钮后,会执行右侧绑定的槽函数。当前我们没有添加槽函数,所以右侧槽函数列表是空的。
- 单击绿色的“+”按钮,添加一个名为“send_info”的函数,点击“OK”:
- 回到刚刚对话框,这时左面会出现我们刚刚新建的“send_info”的函数,同时选中左右两边的“clicked”和“send_info”,点击OK:
- 这时可以看到按钮处会多了“clicked”和“send_info”两个方框,表明绑定成功,点击保存。
2.3 运行槽函数
- 回到PyCharm,选中Main.ui后进行编译:
- 回到SPT.py,dubug一下,这时会看到console报错:
- 这表明在SPT.py中没有我们刚刚在QtDesigner中绑定的“send_info”函数,我们在SPT.py的Win_Main类中,增加“send_info”函数:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
import Main
class Win_Main(QMainWindow):
def __init__(self, parent=None):
super(Win_Main, self).__init__(parent)
self.ui = Main.Ui_MainWindow()
self.ui.setupUi(self)
# 该处增加send_info函数:
def send_info(self):
print("点击了发送按钮")
if __name__== "__main__":
app = QApplication(sys.argv)
# 界面实例化
Win_Main = Win_Main()
# 界面显示
Win_Main.show()
sys.exit(app.exec_())
- 此时点击“发送”按钮,console中会出现“点击了发送按钮”,表明函数绑定成功。
- 其他的控件绑定的方法与此方法大同小异,区别在于不同控件有不同的出发槽函数方式,如QcomboBox具有如下触发方式,常用的是currentTextChange,其他方式小伙伴可以查一下: