- PyQt Tutorial
- PyQt - Home
- PyQt - Introduction
- PyQt - Hello World
- PyQt - Major Classes
- PyQt - Using Qt Designer
- PyQt - Signals and Slots
- PyQt - Layout Management
- PyQt - Basic Widgets
- PyQt - QDialog Class
- PyQt - QMessageBox
- PyQt - Multiple Document Interface
- PyQt - Drag and Drop
- PyQt - Database Handling
- PyQt - Drawing API
- PyQt - BrushStyle Constants
- PyQt - QClipboard
- PyQt - QPixmap Class
- PyQt Useful Resources
- PyQt - Quick Guide
- PyQt - Useful Resources
- PyQt - Discussion
PyQt - 信号和槽
与以顺序方式执行的控制台模式应用程序不同,基于 GUI 的应用程序是事件驱动的。函数或方法的执行是为了响应用户的操作,例如单击按钮、从集合中选择项目或单击鼠标等,称为事件。
用于构建 GUI 界面的小部件充当此类事件的源。每个 PyQt 小部件都派生自 QObject 类,旨在发出“信号”以响应一个或多个事件。该信号本身不执行任何操作。相反,它“连接”到“插槽”。该槽可以是任何可调用的 Python 函数。
在 PyQt 中,信号和槽之间的连接可以通过不同的方式实现。以下是最常用的技术 -
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
当小部件发出信号时,调用 slot_function 的更方便的方法如下 -
widget.signal.connect(slot_function)
假设单击按钮时是否要调用一个函数。在这里,单击的信号将连接到可调用的函数。它可以通过以下两种技术中的任何一种来实现 -
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), 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()函数
QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)
例子
import sys from PyQt4.QtCore import * from PyQt4.QtGui 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) QObject.connect(b2,SIGNAL("clicked()"),b2_clicked) win.setGeometry(100,100,200,100) win.setWindowTitle("PyQt") 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