接下来这个专题介绍PyQt的一些内容 教程翻译自: [https://www.tutorialspoint.com/pyqt/pyqt_introduction.htm](https://www.tutorialspoint.com/pyqt/pyqt_introduction.htm) 由于本人也是学习状态,翻译可能不准确,请及时指出,我会很快修正 一些关键字会直接使用英文 目前该专题为纯理论,实际操作在完成后有演示 PyQt版本: PyQt4 ##什么是信号与槽 不像终端程序那样的顺序执行程序,GUI程序可以以事件驱动的,函数和方法可以被用来响应用户的行为,像是点击一个按钮,选择一个复选框等 每个PyQt Widget(由QObject 类继承而来)可以被用作于这些事件的源,即发出一个或多个'信号'(signal),譬如点击,勾选 信号本身并不会做任何的动作,它会和一个槽(Slot)进行连接,槽可以调用Python程序. ## 如何连接 我们有如下2个方式进行Signal和Slot的连接 ``` QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function) ``` ``` widget.signal.connect(slot_function) ``` 这里我们假设当我们点击(clicked)一个按钮(button)是触发一个函数(slot_function) -------- 可以有如下两种写法 ``` QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function) button.clicked.connect(slot_function) ``` ##连接案例 我们假设有b1 b2 两个 QPushButton 在QDialog窗体上,当我们点击b1 b2两个按钮时调用b1_clicked() 和 b2_clicked()两个函数 我们可以这么写 ``` b1.clicked.connect(b1_clicked()) When b2 is clicked, the clicked() signal is connected to b2_clicked() function 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() ``` ## 执行结果 执行和如下图: [image:139 size:orig] 点击按钮后输出 ``` Button 1 clicked Button 2 clicked ```