1. 一个关于事件和响应的简单例子python
import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): lcd = QtGui.QLCDNumber(self) sld = QtGui.QSlider(QtCore.Qt.Horizontal, self) vbox = QtGui.QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(sld) self.setLayout(vbox) sld.valueChanged.connect(lcd.display) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Signal & slot') self.show() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
能够看到app
lcd = QtGui.QLCDNumber(self) sld = QtGui.QSlider(QtCore.Qt.Horizontal, self)
lcd 建立了一个 LCDNumber 的数字。sld则建立了 一个垂直的滑条。ide
vbox.addWidget(lcd) vbox.addWidget(sld)
将滑条和数字显示器做为窗口建立。ui
sld.valueChanged.connect(lcd.display)
滑条的数值变化这个事件的响应定位lcd数值的显示
spa
2. 键盘响应.net
import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Event handler') self.show() def keyPressEvent(self, e): if e.key() == QtCore.Qt.Key_Escape: self.close() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
定义了一个keypress时间,能够看到出了self 以外,还有e参数。code
事件是,键盘的输入。 而接受这个事件是e。最后做出反应的是self,也就是窗口。blog
规定当事件是键盘的输入为 点击到esc时,窗口会关闭事件
3. 事件窗口
get
import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QMainWindow): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): btn1 = QtGui.QPushButton("Button 1", self) btn1.move(30, 50) btn2 = QtGui.QPushButton("Button 2", self) btn2.move(150, 50) btn1.clicked.connect(self.buttonClicked) btn2.clicked.connect(self.buttonClicked) self.statusBar() self.setGeometry(300, 300, 290, 150) self.setWindowTitle('Event sender') self.show() def buttonClicked(self): sender = self.sender() self.statusBar().showMessage(sender.text() + ' was pressed') def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
clicked.connect 方法将点击button事件与 方法进行连接。能够看到,buttonClicked 方法定义的是点击到button后在状态栏进行显示
4. 发送事件
import sys from PyQt4 import QtGui, QtCore class Communicate(QtCore.QObject): closeApp = QtCore.pyqtSignal() class Example(QtGui.QMainWindow): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.c = Communicate() self.c.closeApp.connect(self.close) self.setGeometry(300, 300, 290, 150) self.setWindowTitle('Emit signal') self.show() def mousePressEvent(self, event): self.c.closeApp.emit() def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
从 QtCore.Qobject 中能够定义一个信号的发射。程序定义了communicate 方法,用来发射一个无参数的方法。而在app建立的方法中,定义了这个信号的发射是经过点击鼠标来实现的(mousepressevent以及emit方法)。而在initUI中,经过connect将这个信号的对应于客户端的关闭
http://blog.csdn.net/hlqyq/article/details/6713828
有关于信号的进一步的分析