PyQt5-為元件的內建訊號編寫槽函式
阿新 • • 發佈:2021-06-26
為元件的內建訊號編寫槽函式
圖是這樣
我們把確定按鈕綁定了accept()函式,把退出按鈕綁定了close()函式。接下來,我們來看一下清空按鈕。
清空:
首先在__init__()裡將其繫結一個函式
self.__ui.pushButton.clicked.connect(self.clear_text)
其次在myDialog類中編寫clear_text()函式
def clear_text(self):
self.__ui.plainTextEdit.clear()
這樣清空按鈕的功能就實現了。
# # 與UI窗體類對應的業務邏輯類 import sys from PyQt5.QtWidgets import QDialog, QApplication from PyQt5.QtGui import QPalette from PyQt5.QtCore import Qt, pyqtSlot from Dialog import Ui_Dialog class QmyDialog(QDialog): def __init__(self, parent=None): super().__init__(parent) # 呼叫父類建構函式,建立QWidget窗體 self.ui = Ui_Dialog() # 建立UI物件 self.ui.setupUi(self) # 構造UI # ///////////// 自行新增的部分 ///////////// """ 這部分如果是按照槽函式命名規則命名的,可以註釋掉,如果是自己命名的,那麼需要加上。 命名規則:on_<object name>_<signal name>(<signal parameters>) 如清空按鈕就是:on_btnClear_clicked """ # ================================================================== # # 新增下劃線 # self.ui.chkBoxUnder.clicked.connect(self.on_chkBoxUnder_clicked) # # # 修改編輯框中字型為斜體 # self.ui.chkBoxItalic.clicked.connect(self.on_chkBoxItalic_clicked) # # # # 修改編輯框中字型為斜體 # # self.ui.chkBoxItalic.toggled.connect(self.on_chkBoxItalic_toggled) # # # 新增加粗效果 # self.ui.chkBoxBold.toggled.connect(self.on_chkBoxBold_toggled) # # # 新增clear效果 # self.ui.btnClear.clicked.connect(self.on_btnClear_clicked) # ================================================================== # 設定顏色關聯函式 self.ui.radioBlack.clicked.connect(self.do_setTextColor) self.ui.radioRed.clicked.connect(self.do_setTextColor) self.ui.radioBlue.clicked.connect(self.do_setTextColor) # #//////////////////自定義槽函式//////////////////// # 設定文字顏色 def do_setTextColor(self): plet = self.ui.plainTextEdit.palette() # 獲取palette if(self.ui.radioBlack.isChecked()): plet.setColor(QPalette.Text, Qt.black) elif(self.ui.radioRed.isChecked()): plet.setColor(QPalette.Text, Qt.red) elif(self.ui.radioBlue.isChecked()): plet.setColor(QPalette.Text, Qt.blue) self.ui.plainTextEdit.setPalette(plet) # 將編輯框裡面的文字新增下劃線 def on_chkBoxUnder_clicked(self): checked = self.ui.chkBoxUnder.isChecked() # 讀取勾選狀態 font = self.ui.plainTextEdit.font() font.setUnderline(checked) self.ui.plainTextEdit.setFont(font) # @pyqtSlot(bool) # # 將編輯框裡面的文字變為斜體 # def on_chkBoxItalic_clicked(self, checked): # # checked = self.ui.chkBoxItalic.isChecked() # font = self.ui.plainTextEdit.font() # font.setItalic(checked) # self.ui.plainTextEdit.setFont(font) # 將編輯框裡面的文字變為斜體 def on_chkBoxItalic_clicked(self): checked = self.ui.chkBoxItalic.isChecked() font = self.ui.plainTextEdit.font() font.setItalic(checked) self.ui.plainTextEdit.setFont(font) # # 將編輯框裡面的文字變為斜體 # def on_chkBoxItalic_toggled(self, checked): # # checked = self.ui.chkBoxItalic.isChecked() # font = self.ui.plainTextEdit.font() # font.setItalic(checked) # self.ui.plainTextEdit.setFont(font) # 將編輯框裡面的內容加粗 def on_chkBoxBold_toggled(self, checked): font = self.ui.plainTextEdit.font() font.setBold(checked) # 引數checked表示勾選狀態 self.ui.plainTextEdit.setFont(font) # 清除編輯框裡面的內容函式 def on_btnClear_clicked(self): self.ui.plainTextEdit.clear() if __name__ == "__main__": app = QApplication(sys.argv) # 建立app,用QApplication類 form = QmyDialog() form.show() sys.exit(app.exec_())
注意,程式碼中關於斜體部分,舉了3種方式,都可以實現其效果,其中有一種是@pyqtSlot(bool),這是overload型訊號
overload型訊號的處理,在QCheckBox類元件中,有兩個名稱為clicked的訊號,一個是不帶引數的clicked()訊號,使用這個訊號生成槽函式是可以自動關聯的;另一個是帶引數的clicked(bool)訊號,它將複選框的當前勾選狀態作為引數傳遞給槽函式。這種名稱相同但引數個數或型別不同的訊號就是overload型訊號。connectSlotsByName()函式進行訊號與槽函式的關聯時會使用一個預設的訊號,對QCheckBox來說,預設使用的是不帶引數的clicked()訊號,而如果定義on_chkBoxItalic_clicked(self,checked)是需要傳遞進來一個引數的,那麼如果想要使用這個槽函式,就需要使用@pyqtSlot修飾符,用這個修飾符將函式的引數型別宣告清楚。,這樣,connectSlotsByName()函式就會自動使用clicked(bool)訊號與這個槽函式關聯,執行就沒問題。