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