- PyQt5 教程
- PyQt5 - 主页
- PyQt5 - 简介
- PyQt5 - 新增功能
- PyQt5 - 你好世界
- PyQt5 - 主要类
- PyQt5 - 使用 Qt 设计器
- PyQt5 - 信号和槽
- PyQt5 - 布局管理
- PyQt5 - 基本小部件
- PyQt5 - QDialog 类
- PyQt5 - QMessageBox
- PyQt5 - 多文档界面
- PyQt5 - 拖放
- PyQt5 - 数据库处理
- PyQt5 - 绘图 API
- PyQt5 - BrushStyle 常量
- PyQt5 - QClipboard
- PyQt5 - QPixmap 类
- PyQt5 有用资源
- PyQt5 - 快速指南
- PyQt5 - 有用的资源
- PyQt5 - 讨论
PyQt5 - 信号和槽
与以顺序方式执行的控制台模式应用程序不同,基于 GUI 的应用程序是事件驱动的。函数或方法的执行是为了响应用户的操作,例如单击按钮、从集合中选择项目或单击鼠标等,称为事件。
用于构建 GUI 界面的小部件充当此类事件的源。每个 PyQt 小部件都派生自 QObject 类,旨在发出“信号”以响应一个或多个事件。该信号本身不执行任何操作。相反,它“连接”到“插槽”。该槽可以是任何可调用的 Python 函数。
使用 Qt Designer 的信号/槽编辑器
首先设计一个带有 LineEdit 控件和 PushButton 的简单窗体。
希望如果按下按钮,文本框的内容应该被删除。QLineEdit 小部件有一个用于此目的的clear() 方法。因此,按钮的单击信号将连接到文本框的clear()方法。
首先,从编辑菜单中选择编辑信号/时隙(或按 F4)。然后用鼠标突出显示按钮并将光标拖向文本框
释放鼠标时,将显示一个对话框,显示按钮信号和插槽方法。选择点击信号和clear()方法
右下角的信号/槽编辑器窗口将显示结果 -
从 ui 文件中保存 ui 和 Build 以及 Python 代码,如下面的代码所示 -
pyuic5 -x signalslot.ui -o signalslot.py
生成的 Python 代码将通过以下语句在信号和槽之间建立连接 -
self.pushButton.clicked.connect(self.lineEdit.clear)
运行 Signalslot.py 并在 LineEdit 中输入一些文本。如果按下按钮,文本将被清除。
构建信号槽连接
您可以不使用 Designer,而是通过以下语法直接建立信号槽连接 -
widget.signal.connect(slot_function)
假设单击按钮时是否要调用一个函数。在这里,单击的信号将连接到可调用的函数。它可以通过以下任何技术来实现 -
button.clicked.connect(slot_function)
例子
在下面的示例中,两个 QPushButton 对象(b1 和 b2)被添加到 QDialog 窗口中。我们希望在单击 b1 和 b2 时分别调用函数 b1_clicked() 和 b2_clicked()。
单击 b1 时,clicked() 信号将连接到 b1_clicked() 函数 -
b1.clicked.connect(b1_clicked())
当单击 b2 时,clicked() 信号将连接到 b2_clicked() 函数。
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * def window(): app = QApplication(sys.argv) win = QDialog() b1 = QPushButton(win) b1.setText("Button1") b1.move(50,20) b1.clicked.connect(b1_clicked) b2 = QPushButton(win) b2.setText("Button2") b2.move(50,50) b2.clicked.connect(b2_clicked) win.setGeometry(100,100,200,100) win.setWindowTitle("PyQt5") win.show() sys.exit(app.exec_()) def b1_clicked(): print ("Button 1 clicked") def b2_clicked(): print ("Button 2 clicked") if __name__ == '__main__': window()
上面的代码产生以下输出 -
输出
Button 1 clicked Button 2 clicked