小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

信號(hào)與槽函數(shù)的自動(dòng)綁定(三)

 刮骨劍 2019-03-07

在文章使用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代碼:

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'FormUI.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.10
  5. #
  6. # WARNING! All changes made in this file will be lost!
  7. from PyQt5 import QtCore, QtGui, QtWidgets
  8. class Ui_Form(object):
  9. def setupUi(self, Form):
  10. Form.setObjectName("Form")
  11. Form.resize(400, 300)
  12. self.label = QtWidgets.QLabel(Form)
  13. self.label.setGeometry(QtCore.QRect(80, 50, 191, 41))
  14. font = QtGui.QFont()
  15. font.setFamily("方正姚體")
  16. font.setPointSize(14)
  17. self.label.setFont(font)
  18. self.label.setObjectName("label")
  19. self.btn_set = QtWidgets.QPushButton(Form)
  20. self.btn_set.setGeometry(QtCore.QRect(80, 120, 75, 23))
  21. self.btn_set.setObjectName("btn_set")
  22. self.retranslateUi(Form)
  23. QtCore.QMetaObject.connectSlotsByName(Form)
  24. def retranslateUi(self, Form):
  25. _translate = QtCore.QCoreApplication.translate
  26. Form.setWindowTitle(_translate("Form", "自動(dòng)綁定例子演示"))
  27. self.label.setText(_translate("Form", "這是一個(gè)標(biāo)簽"))
  28. self.btn_set.setText(_translate("Form", "設(shè)置標(biāo)簽"))

注意該該界面中,按鈕的名稱或者對(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,代碼如下:

  1. import sys
  2. from PyQt5.QtWidgets import QApplication,QWidget
  3. import FormUI
  4. class mainCode(QWidget,FormUI.Ui_Form):
  5. def __init__(self):
  6. QWidget.__init__(self)
  7. FormUI.Ui_Form.__init__(self)
  8. self.setupUi(self)
  9. def on_btn_set_clicked(self):
  10. self.label.setText("我是自動(dòng)綁定的")
  11. if __name__=='__main__':
  12. app=QApplication(sys.argv)
  13. mainc=mainCode()
  14. mainc.show()
  15. sys.exit(app.exec_())

在這個(gè)代碼中,大家注意幾個(gè)問題:

1.在構(gòu)造函數(shù)

  1. def __init__(self):
  2. QWidget.__init__(self)
  3. FormUI.Ui_Form.__init__(self)
  4. self.setupUi(self)

里面沒有手工綁定信號(hào)和槽函數(shù)的代碼

在槽函數(shù)

  1. def on_btn_set_clicked(self):
  2. self.label.setText("我是自動(dòng)綁定的")

中也沒有添加什么代碼,只是這個(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

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多