开发手册 欢迎您!
软件开发者资料库

PyQt - 信号和插槽

PyQt信号和插槽 - 从简介,Hello World,主要类,使用Qt设计器,信号和插槽,布局管理,QBoxLayout,QGridLayout,QFormLayout类,QLabel小部件,QLineEdit小部件,QPushButton小部件,QRadioButton小部件,QCheckBox小部件开始学习PyQt, QComboBox小部件,QSpinBox小部件,QSlider小部件和信号,QMenuBar,QMenu和QAction小部件,QToolBar小部件,QDialog类,QMessageBox,QInputDialog,QFontDialog小部件,QFileDialog小部件,QTabWidget,QStackedWidget,QSplitter小部件,多文档界面,拖放,数据库处理,绘图API,BrushStyle常量,QClipboard,QDockWidget,QStatusBar小部件,QListWidget,QPixmap类,QScrollBar小部件,QCalendar小部件。

与以顺序方式执行的控制台模式应用程序不同,基于GUI的应用程序是事件驱动的.执行函数或方法以响应用户的操作,例如单击按钮,从集合中选择项目或鼠标单击等,称为事件.

用于构建GUI界面的窗口小部件充当此类事件的来源.每个PyQt小部件都是从QObject类派生的,旨在发出" signal "以响应一个或多个事件.信号本身不会执行任何操作.相反,它"连接"到'插槽'.插槽可以是任何可调用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)

示例

在以下示例中,QDialog中添加了两个QPushButton对象(b1和b2)窗口.我们想分别在点击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 sysfrom 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 clickedButton 2 clicked