文章目录
信号槽是 qt 的核心机制,在创建事件循环之后,通过建立信号与槽的连接就可以实现对象之间的通信。
当信号发射时,连接的槽函数将自动执行,在 PySide6 中,信号与槽通过 QObject.signal.connect()
连接。
多个信号可以与单个槽进行连接,单个信号也可以与多个槽进行连接。不同的控件能够发射的信号 种类和触发时机也是不同的。
信号槽的使用
直接上例子,新建一个窗口,窗口类型为 Widget,将一个按钮拖入该窗口,要实现的功能是将鼠标左键单击这个按钮的时候,则关闭这个窗口。
将按钮拖入窗口中,更改按钮的文本和该按钮对应的对象名称。按钮名称为 “关闭窗口”,按钮的对象名称(objectName:)为 btn_close_win。如下图:
依次点击: designer 的菜单栏 -> 编辑 -> 编辑信号/槽,进入信号与槽的编辑模式,将鼠标放在关闭窗口
的按钮上,点击鼠标左键并拖到接收者(也就是窗体上),这样就建立了连接。
接着会弹出配置连接的窗口,如上图所示,可以看到控件按钮会发射很多信号,只要选择一个信号,并单击确定按钮,就会生成对应的槽函数进行该信号的处理。
由于要达到单击按钮关闭窗口的效果,所以这里要勾选 “显示从 QWifget 继承的信号和槽” 复选框,在左侧的窗口中选择 clicked() 选项(表示单击信号),右侧的窗口中选择 close() 选项(表示关闭窗口)。
整体流程就是当单击这个 关闭窗口 的按钮,会发射 clicked 信号到这个窗体,这个信号会被窗体的 close() 捕捉到,触发该窗体的 close 行为,关闭该窗体。
让我们将这个窗体保存名为 WinSignalSlog.ui,然后使用 uic 编译为 py 代码,启动这个窗口,点击按钮尝试看是否该窗体会关闭。启动的代码如下: