3.2 QPushButton
QPushButton是常用的按钮组件,前面的一些示例中都是将其当作一个普通按钮使用的,为其clicked()信号编写槽函数进行响应。
QPushButton有一个checkable属性,如果设置为True, QPushButton按钮可以当作CheckBox或RadioButton使用。
图3-2是示例Demo3_2运行时界面。最上面一行的3个用于设置文字对齐方式的按钮只能选择一个,类似于QRadioButton组件。中间一行用于设置粗体、斜体、下划线的3个按钮可以切换选中状态,类似于QCheckBox组件。下面的3个QCheckBox组件用于控制下方的一个QLineEdit组件的属性。
图3-2 示例Demo3_2运行时界面
QPushButton按钮之所以具有这样的效果,是对按钮进行了分组,并且设置了相应的属性。一个容器组件内的同类型QPushButton按钮自动分成一组,图3-2中的6个QPushButton按钮的分组和关键属性设置如表3-2所示。
表3-2 窗体上QPushButton按钮的主要属性设置
窗体Widget.ui设计时的布局如图3-3所示,设置对齐方式的3个按钮用一个水平布局设置为一组,设置字体的3个按钮也采用水平布局设置为一组。窗体上所有组件的布局管理和属性设置可查看源文件Widget.ui。
图3-3 示例Demo3_2的窗体设计时界面
窗体业务逻辑类QmyWidget所在文件myWidget.py的代码如下(省略了窗体测试部分的代码):
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import pyqtSlot, Qt from PyQt5.QtGui import QFont from ui_Widget import Ui_Widget class QmyWidget(QWidget): def __init__(self, parent=None): super().__init__(parent) #调用父类构造函数,创建窗体 self.ui=Ui_Widget() #创建UI对象 self.ui.setupUi(self) #构造UI ## =======由connectSlotsByName() 自动关联的槽函数================= def on_btnAlign_Left_clicked(self): ##"居左"按钮 self.ui.editInput.setAlignment(Qt.AlignLeft) def on_btnAlign_Center_clicked(self): ##"居中"按钮 self.ui.editInput.setAlignment(Qt.AlignCenter) def on_btnAlign_Right_clicked(self): ##"居右"按钮 self.ui.editInput.setAlignment(Qt.AlignRight) @pyqtSlot(bool) ##"粗体"按钮 def on_btnFont_Bold_clicked(self, checked): font=self.ui.editInput.font() font.setBold(checked) self.ui.editInput.setFont(font) @pyqtSlot(bool) ##"斜体"按钮 def on_btnFont_Italic_clicked(self, checked): font=self.ui.editInput.font() font.setItalic(checked) self.ui.editInput.setFont(font) @pyqtSlot(bool) ##"下划线"按钮 def on_btnFont_UnderLine_clicked(self, checked): font=self.ui.editInput.font() font.setUnderline(checked) self.ui.editInput.setFont(font) @pyqtSlot(bool) ##"Readonly"复选框 def on_chkBox_Readonly_clicked(self, checked): self.ui.editInput.setReadOnly(checked) @pyqtSlot(bool) ##"Enabled"复选框 def on_chkBox_Enable_clicked(self, checked): self.ui.editInput.setEnabled(checked) @pyqtSlot(bool) ##"ClearButtonEnabled"复选框 def on_chkBox_ClearButton_clicked(self, checked): self.ui.editInput.setClearButtonEnabled(checked)
用于设置对齐方式的3个按钮是互斥的,点击一个按钮就可以设置相应的对齐方式,所以这3个按钮使用clicked()信号编写槽函数。
设置字体的3个按钮是可复选的,所以使用clicked(bool)信号编写槽函数,复选的状态参数checked可以在槽函数里直接使用。注意,QPushButton的信号clicked(bool)与clicked()是overload型信号,且clicked(bool)不是默认信号,所以需要使用修饰符@pyqtSlot(bool)进行函数参数类型说明。
QCheckBox组件一般使用clicked(bool)信号编写槽函数,复选状态可以作为参数传递给槽函数。
提示 如果窗体测试部分的程序没有特别的变化,后面在列出窗体业务逻辑类的代码时,都将省略窗体测试部分的代码。