当前位置:网站首页>PyQt5快速开发与实战 4.5 按钮类控件 and 4.6 QComboBox(下拉列表框)
PyQt5快速开发与实战 4.5 按钮类控件 and 4.6 QComboBox(下拉列表框)
2022-07-27 17:47:00 【Ding Jiaxiong】
PyQt5快速开发与实战
文章目录
4. 第4章 PyQt5 基本窗口控件
4.5 按钮类控件
4.5.1 QAbstractButton
在任何GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作。在PyQt中根据不同的使用场景将按钮划分为不同的表现形式。按钮的基类是QAbstractButton,提供了按钮的通用性功能。QAbstractButton类为抽象类,不能实例化,必须由其他的按钮类继承QAbstractButton类,来实现不同的功能、不同的表现形式。
常见的按钮类:
- QpushButton
- QToolButton
- QRadioButton
- QCheckBox
QAbstractButton提供的状态:
| 状态 | 含义 |
|---|---|
| isDown() | 提示按钮是否被按下 |
| isChecked() | 提示按钮是否已经标记 |
| isEnable() | 提示按钮是否可以被用户点击 |
| isCheckAble() | 提示按钮是否为可标记的 |
| setAutoRepeat() | 设置按钮是否在用户长按时可以自动重复执行 |
QAbstractButton提供的信号:
| 信号 | 含义 |
|---|---|
| Pressed | 当鼠标指针在按钮上并按下左键时触发信号 |
| Released | 当鼠标左键被释放时触发该信号 |
| Clicked | 当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号 |
| Toggled | 当按钮的标记状态发生改变时触发该信号 |
4.5.2 QPushButton
QPushButton类继承自QAbstractButton类,其形状是长方形,文本标题或图标可以显示在长方形上。它也是一种命令按钮,可以单击该按钮执行一些命令,或者响应一些事件。常见的有“确认”“申请”“取消”“关闭”“是”“否”等按钮。
命令按钮通常通过文本来描述执行的动作,有时候也会通过快捷键来执行对应按钮的命令。
QPushButton类中的常用方法
方法 描述 setCheckable() 设置按钮是否已经被选中,如果设置为True,则表示按钮将保持已点击和释放状态 toggle() 在按钮状态之间进行切换 setIcon() 设置按钮上的图标 setEnabled() 设置按钮是否可以使用,当设置为False时,按钮变成不可用状态,点击它不会发射信号 isChecked() 返回按钮的状态。返回值为True或False setDefault() 设置按钮的默认状态 setText() 设置按钮的显示文本 text() 返回按钮的显示文本 为QPushButton设置快捷键
通过按钮名字能为 QPushButton设置快捷键,比如名字为“&Download”的按钮,它的快捷键是“Alt+D”。
4.5.3 QPushButton按钮的使用
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Form(QDialog):
def __init__(self,parent = None):
super(Form, self).__init__(parent)
layout = QVBoxLayout()
self.btn1 = QPushButton("Button1")
self.btn1.setCheckable(True)
self.btn1.toggle() ## 切换按钮状态
self.btn1.clicked.connect(lambda : self.whichbtn(self.btn1))
self.btn1.clicked.connect(self.btnstate)
layout.addWidget(self.btn1)
self.btn2 = QPushButton('image')
self.btn2.setIcon(QIcon("../打包资源文件/pic/python.jpg"))
self.btn2.clicked.connect(lambda : self.whichbtn(self.btn2))
layout.addWidget(self.btn2)
self.setLayout(layout)
self.btn3 = QPushButton("Disabled")
self.btn3.setEnabled(False)
layout.addWidget(self.btn3)
self.btn4 = QPushButton('&Download')
self.btn4.setDefault(True)
self.btn4.clicked.connect(lambda : self.whichbtn(self.btn4))
layout.addWidget(self.btn4)
self.setWindowTitle("Button Demo")
def btnstate(self):
if self.btn1.isChecked():
print("Button pressed")
else:
print("Button released")
def whichbtn(self,btn):
print("Clicked button is " + btn.text())
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = Form()
win.show()
sys.exit(app.exec_())

4.5.4 QRadioButton
QRadioButton类继承自QAbstractButton类,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项,标签用于显示对应的文本信息。单选钮是一种开关按钮,可以切换为on或者off,即 checked或者unchecked,主要是为用户提供“多选一”的选择。
ORadioButton是单选钮控件默认是独占的(Exclusive)。对于继承Widget的多个单选钮,它们属于同一个按钮组合,在单选钮组里,一次只能选择一个单选钮。如果需要多个独占的按钮组合,则需要将它们放在QGroupBox或QButtonGroup 中。
当将单选钮切换到on或者off 时,就会发送 toggled信号,绑定这个信号,在按钮状态发生改变时,触发相应的行为。
QRadioButton类的常用方法
| 方法 | 描述 |
|---|---|
| setCheckable() | 设置按钮是否已经被选中,可以改变单选钮的选中状态,如果设置为 True,则表示单选钮将保持己点击和释放状态 |
| isChecked() | 返回单选钮的状态。返回值为True或 False |
| setText() | 设置单选按钮的显示文本 |
| text() | 返回单选按钮的显示文本 |
在 QRadioButton中,toggled信号是在切换单选钮状态(开、关)时发射的,而clicked信号则在每次点击单选钮时都会发射。在实际中,一般只有状态改变时才有必要去响应,因此toggled信号更适合用于状态监控。
4.5.5 QRadioButton按钮的使用
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Radiodemo(QWidget):
def __init__(self,parent = None):
super(Radiodemo, self).__init__(parent)
layout = QHBoxLayout()
self.btn1 = QRadioButton("Button1")
self.btn1.setChecked(True)
self.btn1.toggled.connect(lambda : self.btnstate(self.btn1))
layout.addWidget(self.btn1)
self.btn2 = QRadioButton("Button2")
self.btn2.toggled.connect(lambda :self.btnstate(self.btn2))
layout.addWidget(self.btn2)
self.setLayout(layout)
self.setWindowTitle("RadioButton Demo")
def btnstate(self,btn):
if btn.text() == "Button1":
if btn.isChecked() == True:
print(btn.text() + "is selected")
else:
print(btn.text() + "is deselected")
if btn.text() == "Button2":
if btn.isChecked() == True:
print(btn.text() + "is selected")
else:
print(btn.text() + "is deselected")
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = Radiodemo()
win.show()
sys.exit(app.exec_())

4.5.6 QCheckBox
QCheckBox类继承自QAbstractButton类,它提供了一组带文本标签的复选框,用户可以选择多个选项。和QPushButton一样,复选框可以显示文本或者图标,其中文本可以通过构造函数或者 setText()来设置;图标可以通过 setIcon()来设置。在视觉上,QButtonGroup可以把许多复选框组织在一起。
OCheckBox(复选框)和 QRadioButton(单选钮)都是选项按钮,因为它们都可以在开(选中)或者关(未选中)之间切换。它们的区别是对用户选择的限制:单选钮提供了“多选一”的选择;而复选框提供的是“多选多”的选择。
QCheckBox通常被应用在需要用户选择一个或多个可用的选项的场景中。只要复选框被选中或者取消选中,都会发射一个stateChanged信号。如果想在复选框状态改变时触发相应的行为,请连接这个信号,可以使用isChecked()来查询复选框是否被选中。
除了常用的选中和未选中两种状态,OCheckBox还提供了第三种状态(半选中)来表明“没有变化”。当需要为用户提供一个选中或者未选中复选框的选择时,这种状态是很有用的。如果需要第三种状态,则可以通过setTristate()来使它生效,并使用checkState()来查询当前的切换状态。
QCheckBox类中的常用方法
| 方法 | 描述 |
|---|---|
| setChecked() | 设置复选框的状态,设置为True时表示选中复选框,设置为 False时表示取消选中复选框 |
| setText() | 设置复选框的显示文本 |
| text() | 返回复选框的显示文本 |
| isChecked() | 检查复选框是否被选中 |
| setTristate() | 设置复选框为一个三态复选框 |
三态复选框有三种状态:
| 名称 | 值 | 含义 |
|---|---|---|
| Qt.Checked | 2 | 组件没有被选中(默认) |
| Qt.PartiallyChecked | 1 | 组件被半选中 |
| Qt.Unchecked | 0 | 组件被选中 |
4.5.7 QCheckBox按钮的使用
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class CheckBoxDemo(QWidget):
def __init__(self,parent = None):
super(CheckBoxDemo, self).__init__(parent)
groupBox = QGroupBox("Checkboxes")
groupBox.setFlat(True)
layout = QHBoxLayout()
self.checkBox1 = QCheckBox('&Checkbox1')
self.checkBox1.setChecked(True)
self.checkBox1.stateChanged.connect(lambda : self.btnstate(self.checkBox1))
layout.addWidget(self.checkBox1)
self.checkBox2 = QCheckBox("Checkbox2")
self.checkBox2.toggled.connect(lambda : self.btnstate(self.checkBox2))
layout.addWidget(self.checkBox2)
self.checkBox3 = QCheckBox("Checkbox3")
self.checkBox3.setTristate(True)
self.checkBox3.setCheckState(Qt.PartiallyChecked)
self.checkBox3.stateChanged.connect(lambda :self.btnstate(self.checkBox3))
layout.addWidget(self.checkBox3)
groupBox.setLayout(layout)
mainLayout = QVBoxLayout()
mainLayout.addWidget(groupBox)
self.setLayout(mainLayout)
self.setWindowTitle("CheckBox demo")
def btnstate(self,btn):
chk1Status = self.checkBox1.text() + ",is checked = " + str(self.checkBox1.isChecked()) + ',checkstate = ' + str(self.checkBox1.checkState()) + "\n"
chk2Status = self.checkBox2.text() + ",is checked = " + str(self.checkBox2.isChecked()) + ',checkstate = ' + str(self.checkBox2.checkState()) + "\n"
chk3Status = self.checkBox3.text() + ",is checked = " + str(self.checkBox3.isChecked()) + ',checkstate = ' + str(self.checkBox3.checkState()) + "\n"
print(chk1Status + chk2Status + chk3Status)
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = CheckBoxDemo()
win.show()
sys.exit(app.exec_())

4.6 QComboBox(下拉列表框)
QComboBox是一个集按钮和下拉选项于一体的控件,也被称为下拉列表框。
4.6.1 QComboBox类中的常用方法:
| 方法 | 描述 |
|---|---|
| addItem() | 添加一个下拉选项 |
| addItems() | 从列表中添加下拉选项 |
| Clear() | 删除下拉选项集合中的所有选项 |
| count() | 返回下拉选项集合中的数目 |
| currentText() | 返回选中选项的文本 |
| itemText(i) | 获取索引为i的 item的选项文本 |
| currentIndex() | 返回选中项的索引 |
| setItemText(int index,text) | 改变序号为index项的文本 |
4.6.2 QComboBox类中的常用信号
| 信号 | 含义 |
|---|---|
| Activated | 当用户选中一个下拉选项时发射该信号 |
| currentIndexChanged | 当下拉选项的索引发生改变时发射该信号 |
| highlighted | 当选中一个已经选中的下拉选项时,发射该信号 |
4.6.3 QComboBox按钮的使用——案例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ComboxDemo(QWidget):
def __init__(self,parent = None):
super(ComboxDemo, self).__init__(parent)
self.setWindowTitle("ComBox案例")
self.resize(300 , 90)
layout = QVBoxLayout()
self.lb1 = QLabel("")
self.cb = QComboBox()
self.cb.addItem("C")
self.cb.addItem("C++")
self.cb.addItems(["Java","C#","Python"])
self.cb.currentIndexChanged.connect(self.selectionchange)
layout.addWidget(self.cb)
layout.addWidget(self.lb1)
self.setLayout(layout)
def selectionchange(self,i):
self.lb1.setText(self.cb.currentText())
print("Item in the list are:")
for count in range(self.cb.count()):
print("Item" + str(count) + "=" + self.cb.itemText(count))
print("Current index",i , "selection changed",self.cb.currentText())
if __name__ == '__main__':
from pyqt5_plugins.examples.exampleqmlitem import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QApplication(sys.argv)
win = ComboxDemo()
win.show()
sys.exit(app.exec_())

边栏推荐
- [论文阅读] Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation
- TS2532: Object is possibly ‘undefined‘
- Underlying principle of mvcc
- PMP practice once a day | don't get lost in the exam -7.27 (including agility + multiple choices)
- LED high precision scale scheme specification
- Sword finger offer 25. merge two sorted linked lists
- mysql数据库中的数据如何加密呢?mysql8.0自带新特性
- 2022年,软件测试还能学吗?别学了,软件测试岗位饱和了...
- Rodin 安装 SMT Solvers 插件
- 康佳半导体首款存储主控芯片量产出货,首批10万颗
猜你喜欢

邬贺铨:因地制宜 数字化技术赋能“双碳”实践

剑指 Offer 25. 合并两个排序的链表

Wu Hequan: digital technology empowering "double carbon" practice according to local conditions

Use cpolar to build a business website (5)

PC Museum (3) MITs Altair 8800

C background GC cause and effect

Explore a new generation of activities to win customers, virtualization activities win a trick | manufacturer solicitation

An in-depth understanding of crystal oscillation circuit derived from xtalin pin and xtalout pin of single chip microcomputer

Capacitance in series and in parallel and capacitance in series and balance resistance

使用cpolar建立一个商业网站(5)
随机推荐
Online judge output overrun
Sword finger offer 25. merge two sorted linked lists
Function priority
2019年全球半导体市场收入4183亿美元,同比下滑11.9%
一看就懂的ESLint
Introduction to basic cesium controls
PC Museum (3) MITs Altair 8800
最新获得淘宝app商品详情原数据 的API
10.31 extended configuration of static route
JS array method foreach and map comparison
函数优先顺序
C#求完全数,输出水仙花以及类的使用
GLTF模型添加关节控制
MongoDB 学习笔记: BSON 结构分析
C# 后台GC 的前因后果
Common errors reported by pytorch
Explore a new generation of activities to win customers, virtualization activities win a trick | manufacturer solicitation
【IoT】卫朋:6000+ 字解读 | 2022年产品人必备的7个产品管理工具(1.0版)
十年测试老鸟聊聊移动端兼容性测试
Talk about how redis handles requests