PyQt4编程之自定义插槽
生活随笔
收集整理的這篇文章主要介紹了
PyQt4编程之自定义插槽
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先聲明,這是學習了別人的文章后寫的,原網址點擊打開鏈接
簡單地說,就是把上一篇中的
self.connect(exit,QtCore.SIGNAL('triggered()'),QtCore.SLOT('close()'))
改寫成
exit.triggered.connect(self.close)
其中exit.triggered是一個signal信號,這里self.close就是槽函數了。
我們先詳細講一下信號和槽之間的關系吧。
信號與槽能讓任意的QT對象之間進行通信,信號可以被發射出去,槽可以接受信號。每個QT對象都包含預定的信號和槽。
信號與槽連接常用connect函數,connect(Object1,SIGNAL(signal),Object2,SLOT(slot))
我們來看一下connect函數的三個原型吧
connect(QObject, QT_SIGNAL, QObject, QT_SLOT_QT_SIGNAL, Qt.ConnectionType = Qt.AutoConnection) -> object connect(QObject, QT_SIGNAL, Callable[..., None], Qt.ConnectionType = Qt.AutoConnection) -> object connect(self, QObject, QT_SIGNAL, QT_SLOT_QT_SIGNAL, Qt.ConnectionType = Qt.AutoConnection) -> object 可以看出來沒有改過的語句明顯調用的是第二個原型, 我們也可以把它寫成第一種和第三種形式,分別為 QtGui.QMainWindow.connect(exit,QtCore.SIGNAL('triggered()'),self,QtCore.SLOT('close()')) QtGui.QMainWindow.connect(self,exit,QtCore.SIGNAL('triggered()'),QtCore.SLOT('close()')) 上文說的兩個對象,就體現在connect函數中的Object1和Object2,signal是Object1對象的信號,注意要用SIGNAL宏包起來。當一個特定事件發生的時候(如點擊按鈕)或者Object1調用emit函數的時候,signal信號被發射。slot(槽)就是一個可以被調用處理特定信號的函數(或方法),是普通的對象成員函數。它們存在一些特點:1.一個信號可以與另一個信號相連2.表示一個信號可以與多個槽相連3.表示同一個槽可以響應多個信號 以上特點可以看出信號和槽是寬松地聯系在一起的:一個發射信號的對象不用知道也不用注意哪個槽或哪些槽要接收這個信號。對象只負責發送信號,它不知道也不需要知道另一端是誰在接收這個信號。同樣的,一個槽也不知道是否有任何信號與自己相連接。 一個簡單實例:點擊close按鈕關閉應用程序 import sys from PyQt4 import QtGui, QtCoreclass Example(QtGui.QWidget):def __init__(self):QtGui.QWidget.__init__(self)button = QtGui.QPushButton('close', self)button.move(100, 60)self.connect(button, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('close()'))self.setWindowTitle('Signal & slot')self.resize(250, 150)app = QtGui.QApplication(sys.argv) ex = Example() ex.show() sys.exit(app.exec_())
我們現在接著來看看自定義插槽。之前講到exit.triggered是一個signal信號,這里self.close就是槽函數
給出一個例子,點擊’change color’按鈕,讓背景顏色改變吧!
這里寫圖片描述
import sys from PyQt4 import QtGui, QtCoreclass Example(QtGui.QWidget):def change(self):print 'You pressed the butthon'palette = QtGui.QPalette(self) #create a object of class QPalette, defaultpalette.setColor(self.backgroundRole(), QtGui.QColor(192,253,123)) #給調色板設置背景顏色self.setPalette(palette) #把調色板的屬性給self(即QWidget對象)def __init__(self):QtGui.QWidget.__init__(self)button = QtGui.QPushButton('change color', self)button.move(100, 60)self.setWindowTitle('Signal & slot')self.resize(250, 150)button.clicked.connect(self.change) #自定義的change函數app = QtGui.QApplication(sys.argv) ex = Example() ex.show() sys.exit(app.exec_())
詳細講解一下change函數部分吧,
同樣地,可以猜測出來palette是QPalette的一個對象,而且是調用的缺省的構造函數。
這里調用的setColor函數原型是setColor(self, QPalette.ColorRole, QColor),(應該是),這一句話就是給調色板添上顏色的。
backgroundRole函數原型是backgroundRole(self) ,返回值類型是 QPalette.ColorRole
setPalette函數的原型是:def setPalette(self, QPalette),可以猜測出來是利用調色板給self設置背景顏色的。
各自函數屬于的類是顯而易見的,所以上面分析過程中我就沒有說了。
change函數也可以這樣寫。def change(self):print 'You pressed the butthon' palette = QtGui.QPalette(QtGui.QColor(0,0,0)) #這里調用的是帶參數的構造函數。self.setPalette(palette)
以上部分內容轉自http://blog.csdn.net/u011943221/article/details/47007315
總結
以上是生活随笔為你收集整理的PyQt4编程之自定义插槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyQt4编程之如何做菜单栏
- 下一篇: 初始化字典的6种方式