|
在文章使用PyQt5制作界面(實(shí)現(xiàn)界面與代碼的分離)(二)中,實(shí)現(xiàn)了界面與代碼的分離,但是需要手工進(jìn)行信號與槽函數(shù)的綁定,那么能不能實(shí)現(xiàn)信號和超函數(shù)的自動綁定呢? 答案當(dāng)然是肯定的。 廢話不說,直接上過程 1.制作界面 在該界面中點(diǎn)擊按鈕,然后設(shè)置標(biāo)簽的內(nèi)容,功能很簡單,主要是演示單擊信號和槽函數(shù)是如何自動綁定的。 將該界面轉(zhuǎn)換為python代碼:
注意該該界面中,按鈕的名稱或者對象名是語句設(shè)定的, self.btn_set.setObjectName("btn_set")按鈕的名字設(shè)定為btn_set 同時大家注意:在setupUi函數(shù)的最后一句有這樣的話: QtCore.QMetaObject.connectSlotsByName(Form)這句話什么意思呢?實(shí)現(xiàn)對象通過名字來自動綁定槽函數(shù),也就是說如果槽函數(shù)的名字與對象某個事件的名字相同,將會實(shí)現(xiàn)自動綁定,行不行呢? 新增加一個python文件AutoBind.py,代碼如下:
在這個代碼中,大家注意幾個問題: 1.在構(gòu)造函數(shù)
里面沒有手工綁定信號和槽函數(shù)的代碼 在槽函數(shù)
中也沒有添加什么代碼,只是這個名字很特殊,名字是on_btn_set_clicked,這個名字是on_對象名_事件名組成,因?yàn)?strong>QtCore.QMetaObject.connectSlotsByName(Form)這個語句允許對象通過名字將事件(信號)與槽函數(shù)自動連接,這樣,我們就不用手工綁定了。代碼就能夠自動運(yùn)行。 以上的方法要求槽函數(shù)的名字必須遵守一定的規(guī)則,這樣信號(事件)與槽函數(shù)就能自動綁定。 當(dāng)然還有一些情況比較復(fù)雜,不過都可以實(shí)現(xiàn)自動綁定的,這樣可以省事不少,具體可以參開網(wǎng)址 http://pyqt./Docs/PyQt5/signals_slots.html?highlight=connectslotsbyname
|
|
|
來自: 刮骨劍 > 《PyQt5 教程(2)》