一趁窃、信號(hào)與槽機(jī)制
在GUI編程當(dāng)中旋廷,當(dāng)我們改變了一個(gè)組件的狀態(tài)(按下按鈕),我們經(jīng)常需要通知另外的組件狈网,也就是實(shí)現(xiàn)對(duì)象之間的通信宙搬。早期的GUI編程使用回調(diào),在QT中使用一個(gè)新的機(jī)制--信號(hào)與槽拓哺。在編寫一個(gè)類的時(shí)候要事先定義該類的信號(hào)與槽勇垛,在實(shí)例中可以對(duì)這些信號(hào)與槽進(jìn)行搭配來(lái)實(shí)現(xiàn)程序的目的。
二士鸥、未綁定信號(hào)和綁定信號(hào)
未綁定信號(hào)是繼承QObject的子類所擁有的一個(gè)屬性闲孤,當(dāng)作為一個(gè)實(shí)例屬性引用,Pyqt會(huì)自動(dòng)的把信號(hào)綁定到實(shí)例上來(lái)創(chuàng)建一個(gè)綁定信號(hào)烤礁。這個(gè)機(jī)制就像在實(shí)例中設(shè)定或更新類的屬性會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的實(shí)例屬性一樣讼积。
'''類屬性可以通過<類>或者<類實(shí)例>來(lái)訪問。只有通過類引用可以更新類屬性的值脚仔,
沒有和類屬性同名的實(shí)例屬性時(shí)勤众,通過實(shí)例可以訪問類屬性,但是如果嘗試更形類
屬性的值鲤脏,則會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的實(shí)例屬性并屏蔽對(duì)應(yīng)的類屬性'''
class C(QObject):
var=1
c=C()
C.var
>>1
c.var
>>1
C.var+=1
C.var
>>2
c.var
>>2
c.var+=1
c.var
>>3
C.var
>>2
三们颜、定義新信號(hào)
Pyqt會(huì)為Qt的所有內(nèi)建信號(hào)自動(dòng)定義信號(hào)。使用pyqtSignal()工廠函數(shù)也可以把新建的信號(hào)定義為類的屬性
pyqtSigna()l創(chuàng)建一個(gè)或多個(gè)重載未綁定的信號(hào)作為類屬性。
信號(hào)只能在QObject的子類中定義掌桩,如
class Foo(QObject):
closed=pyqtSignal()
而且他們必須在類創(chuàng)建時(shí)被定義,不能在類創(chuàng)建后作為類屬性動(dòng)態(tài)的添加進(jìn)來(lái)姑食。types參數(shù)定義信號(hào)附帶參數(shù)的類型波岛,name參數(shù)為信號(hào)的名字,如果該項(xiàng)缺省的話則使用類屬性的名字音半。
四则拷、綁定信號(hào)的方法
使用綁定信號(hào)的connect函數(shù)可以把信號(hào)綁定到槽函數(shù)上。
使用綁定信號(hào)的disconnecth函數(shù)可以解除信號(hào)與槽函數(shù)的綁定曹鸠。
使用綁定信號(hào)的emit函數(shù)可以發(fā)射信號(hào)煌茬。
![Uploading Paste_Image_374679.png . . .]
一、信號(hào)與槽機(jī)制
在GUI編程當(dāng)中彻桃,當(dāng)我們改變了一個(gè)組件的狀態(tài)(按下按鈕)坛善,我們經(jīng)常需要通知另外的組件,也就是實(shí)現(xiàn)對(duì)象之間的通信邻眷。早期的GUI編程使用回調(diào)眠屎,在QT中使用一個(gè)新的機(jī)制--信號(hào)與槽。在編寫一個(gè)類的時(shí)候要事先定義該類的信號(hào)與槽肆饶,在實(shí)例中可以對(duì)這些信號(hào)與槽進(jìn)行搭配來(lái)實(shí)現(xiàn)程序的目的改衩。
二、未綁定信號(hào)和綁定信號(hào)
未綁定信號(hào)是繼承QObject的子類所擁有的一個(gè)屬性驯镊,當(dāng)作為一個(gè)實(shí)例屬性引用葫督,Pyqt會(huì)自動(dòng)的把信號(hào)綁定到實(shí)例上來(lái)創(chuàng)建一個(gè)綁定信號(hào)。這個(gè)機(jī)制就像在實(shí)例中設(shè)定或更新類的屬性會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的實(shí)例屬性一樣板惑。
'''類屬性可以通過<類>或者<類實(shí)例>來(lái)訪問橄镜。只有通過類引用可以更新類屬性的值,
沒有和類屬性同名的實(shí)例屬性時(shí)冯乘,通過實(shí)例可以訪問類屬性蛉鹿,但是如果嘗試更形類
屬性的值,則會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的實(shí)例屬性并屏蔽對(duì)應(yīng)的類屬性'''
class C(QObject):
var=1
c=C()
C.var
>>1
c.var
>>1
C.var+=1
C.var
>>2
c.var
>>2
c.var+=1
c.var
>>3
C.var
>>2
三往湿、定義新信號(hào)
Pyqt會(huì)為Qt的所有內(nèi)建信號(hào)自動(dòng)定義信號(hào)妖异。使用pyqtSignal()工廠函數(shù)也可以把新建的信號(hào)定義為類的屬性
pyqtSigna()l創(chuàng)建一個(gè)或多個(gè)重載未綁定的信號(hào)作為類屬性。
信號(hào)只能在QObject的子類中定義领追,如
class Foo(QObject):
closed=pyqtSignal()
而且他們必須在類創(chuàng)建時(shí)被定義他膳,不能在類創(chuàng)建后作為類屬性動(dòng)態(tài)的添加進(jìn)來(lái)。types參數(shù)定義信號(hào)附帶參數(shù)的類型绒窑,name參數(shù)為信號(hào)的名字棕孙,如果該項(xiàng)缺省的話則使用類屬性的名字。
四、綁定信號(hào)的方法
使用綁定信號(hào)的connect函數(shù)可以把信號(hào)綁定到槽函數(shù)上蟀俊。
使用綁定信號(hào)的disconnecth函數(shù)可以解除信號(hào)與槽函數(shù)的綁定钦铺。
使用綁定信號(hào)的emit函數(shù)可以發(fā)射信號(hào)。