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
有關於信號的進一步的分析