PyQt4 學習筆記-4

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

有關於信號的進一步的分析

相關文章
相關標籤/搜索