PyQt5-为组件的内建信号编写槽函数
为组件的内建信号编写槽函数
图是这样
我们把确定按钮绑定了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)信号与这个槽函数关联,运行就没问题。
转载请注明出处,欢迎讨论和交流!