当前位置: 首页 > news >正文

第八节_PySide6基本窗口控件_按钮类控件(QAbstractButton)

文章目录

  • 前言
  • 一、按钮类控件(QAbstractButton) 简介
    • 1.继承链关系
    • 2.按钮类控件概览
  • 二、常用函数和信号
    • 1.QAbstractButton 类中常用的函数介绍
    • 2.QAbstractButton 类中常用的信号介绍
  • 三、QPushButton - 通用命令按钮
    • 1.基础用法
    • 2.高级特性
  • 四、QRadioButton 、QCheckBox、QCommandLinkButton介绍
    • 1.QRadioButton - 单选按钮
    • 2.QCheckBox - 复选框
    • 3.QCommandLinkButton - 现代命令链接
  • 五、QToolButton - 工具栏专用按钮
    • 1.基础功能
    • 2.高级特性
  • 总结与选择指南


前言

本节主要介绍基本窗口控件中的 按钮类控件(QAbstractButton) ,按钮是用户界面中最基础、最重要的交互元素,PySide6 提供了多种专门的按钮控件来满足不同场景的需求,让我们来探索下各种按钮的功能。


一、按钮类控件(QAbstractButton) 简介

1.继承链关系

按钮的基类是 QAbstractButton,提供了按钮的通用性功能。QAbstractButton 为抽象类,
不能实例化,必须由其他的按钮类继承自 QAbstractButton,从而实现不同的功能、不同
的表现形式:

QWidget ← QAbstractButton← QPushButton / QToolButton/ QRadioButton / QCheckBox

2.按钮类控件概览

PySide6 的按钮控件都继承自 QAbstractButton 基类,共享一些核心功能,但各有专长:

控件类型核心用途典型场景
QPushButton通用命令按钮表单提交、对话框确认、操作触发
QRadioButton单选按钮(互斥选择)设置选项、单项选择
QCheckBox复选框(多选)功能开关、多项选择
QCommandLinkButton现代风格命令链接向导界面、步骤引导
QToolButton工具栏专用按钮工具栏、紧凑布局、快速操作

二、常用函数和信号

1.QAbstractButton 类中常用的函数介绍

函数功能描述
setCheckable()设置按钮是否已经被选中,如果设置为 True,则表示按钮将保持已单击和释放状态
toggle()在按钮状态之间进行切换
setIcon()设置按钮上的图标
setEnabled()设置按钮是否可以使用,当设置为 False 时,按钮变成不可用状态,单击它不会发射信号
isChecked()返回按钮的状态,返回值为 True 或 False
setDefault()设置按钮的默认状态
setText()设置按钮的显示文本
text()返回按钮的显示文本
setTriState()将复选框设置为三态(QCheckBox独有)
checkState()查询三态复选框被勾选的状态(QCheckBox独有)

2.QAbstractButton 类中常用的信号介绍

信号功能描述
Pressed当鼠标指针在按钮上并按下左键时触发该信号
Released当鼠标左键被释放时触发该信号
Clicked当鼠标左键被按下并释放时,或者快捷键被释放时触发该信号
Toggled当按钮的标记状态发生变化时触发该信号
stateChanged按钮的当前状态被改变时触发改信号(QCheckBox独有)
triggered(QAction)当QToolButton 中的某个 QAction 被单击时,QToolButton 会触发 triggered 信号,并把该QAction 作为参数传递给槽函数,通过解析 QAction 就可以知道单击的是哪个按钮(QToolButton独有)

三、QPushButton - 通用命令按钮

1.基础用法

①通过setCheckable(True)函数将按钮设置为可以被选择状态;
②要使 toggle() 函数生效,按钮必须首先设置为可选中状态;
③通过setEnabled(False)函数来禁用按钮,使其不可用;
④setIcon()设置图标、setText()设置文本的基础用法;

		#将按钮1设置为可以被选择状态self.ui.Button01.setCheckable(True)self.ui.Button01.toggled.connect(lambda: self.button_click(self.ui.Button01))#要使 toggle() 函数生效,按钮必须首先通过 setCheckable(True) 设置为可选中状态self.ui.Button02.clicked.connect(lambda: self.ui.Button01.toggle())  # 点击按钮2将切换按钮1的状态,即改变“选中True” “未选中False”的状态self.ui.Button02.clicked.connect(self.button02_click)def button_click(self, button):if button.isChecked():self.ui.lab_Text.setText('你按下了' + button.text() + "  isChecked=True")else:self.ui.lab_Text.setText('你按下了' + button.text() + "  isChecked=False")# 启用按钮self.ui.Button03.setEnabled(True)def button02_click(self, button):# 设置图标self.ui.Button02.setIcon(QIcon(':/res/Resources/image/python.png'))# 设置图标尺寸self.ui.Button02.setIconSize(QSize(24, 24))self.ui.Button02.setText("文本改变!")# 禁用按钮self.ui.Button03.setEnabled(False)

在这里插入图片描述
注意点:信号 toggled 和 clicked 的区别,clicked 需要点击按钮才能触发信号,toggled 只要按钮状态改变后就会触发信号,上面的代码使用 按钮2 的触发去改变 按钮1 状态,从而间接的触发了 按钮1 。

2.高级特性

①状态控制:将按钮设置自动重复(长按时重复触发)

# 将按钮3设置自动重复(长按时重复触发)self.ui.Button03.setAutoRepeat(True)self.ui.Button03.setAutoRepeatDelay(500)  # 初始延迟(ms)self.ui.Button03.setAutoRepeatInterval(500)  # 重复间隔(ms)self.ui.Button03.clicked.connect(lambda : print(f"按钮3被触发了!!!"))

②图标与样式:通过样式表自定义外观

		# 通过样式表自定义外观self.ui.Button03.setStyleSheet("""QPushButton {background-color: #4CAF50;  /* 背景色 */color: Blue;               /* 文字颜色 */border: none;               /* 无边框 */padding: 8px 16px;          /* 内边距 */border-radius: 8px;         /* 圆角 */font-weight: bold;}QPushButton:hover {background-color: #45a049;  /* 悬停效果 */}QPushButton:pressed {background-color: #3d8b40;  /* 按下效果 */}QPushButton:disabled {background-color: #cccccc;  /* 禁用状态 */color: #666666;}""")

③设置按钮为默认按钮(按可Enter键触发):注意在 QMainWindow、QWidget 窗口上 Button 只有被选中后按Enter键才有效,在 QDialog 界面直接按Enter键就有效

 		# 设置按钮4为默认按钮(按Enter键触发)self.ui.Button04.setDefault(True)self.ui.Button04.setCheckable(True)self.ui.Button04.clicked.connect(lambda: self.button_click(self.ui.Button04))

在这里插入图片描述

四、QRadioButton 、QCheckBox、QCommandLinkButton介绍

1.QRadioButton - 单选按钮

①用于互斥选择,同一时间只能选择一个选项;

②QRadioButton 是单选按钮控件,默认是独占的(Exclusive)。继承自父类QAbstractButton 的多个单选按钮属于同一个按钮组合,在单选按钮组合中,一次只能选择一个单选按钮。如果需要将多个独占的按钮进行组合,则需要将它们放在 QGroupBox 或 QButtonGroup 中,建议使用 QGroupBox 已集成的组件。

		#QRadioButton - 单选按钮self.ui.btn_Apple.setChecked(True)self.ui.btn_Apple.toggled.connect(lambda: self.Fruit_select(self.ui.btn_Apple))self.ui.btn_Pineapple.toggled.connect(lambda: self.Fruit_select(self.ui.btn_Pineapple))self.ui.btn_Durian.toggled.connect(lambda: self.Fruit_select(self.ui.btn_Durian))

在这里插入图片描述

2.QCheckBox - 复选框

①用于多选场景,支持三种状态,setTriState() 将复选框设置为三态,checkState() 查询三态复选框被勾选的状态;

②QCheckBox 提供了一组带文本标签的复选框,用户可以从中选择多个选项。

		#QCheckBox - 复选框self.ui.box01.setChecked(False)self.ui.box01.stateChanged.connect(self.Animation_select)self.ui.box02.setChecked(False)self.ui.box02.stateChanged.connect(self.Animation_select)self.ui.box03.setTristate(True)  # 启用三态self.ui.box03.setIcon(QIcon(':/res/Resources/image/6.png'))self.ui.box03.setCheckState(Qt.CheckState.PartiallyChecked)self.ui.box03.stateChanged.connect(self.Animation_select)def Animation_select(self):if self.ui.box01.isChecked():A_box01 = "喜欢"else:A_box01 = "不喜欢"if self.ui.box02.isChecked():A_box02 = "喜欢"else:A_box02 = "不喜欢"if self.ui.box03.checkState() == Qt.CheckState.Checked:A_box03 = "喜欢"elif self.ui.box03.checkState() == Qt.CheckState.Unchecked:A_box03 = "不喜欢"else:A_box03 = "无所谓"self.ui.lab_Text.setText(f"你对动漫 【凡人修仙传】 是{A_box01}的;对 【仙逆】 是{A_box02}的;对 【斗破苍穹】 是{A_box03}的")

注意点:通过 setCheckState() 函数可设置控件当前属于哪种状态:

状 态 名 称含 义
Qt.CheckState.Unchecked0组件没有被勾选(默认值)
Qt.CheckState.PartiallyChecked1组件被半勾选
Qt.CheckState.Checked2组件被勾选

在这里插入图片描述

3.QCommandLinkButton - 现代命令链接

① Vista 风格的命令链接按钮,具有现代外观;

② QCommandLinkButton 是QPushButton 的子类,适用于特殊的场景,如单击软件安装界面中的“下一步”按钮切换到其他窗口,它是 QPushButton 在特定场景下的替代品,在一般场景下没有必要使用。

		#QCommandLinkButton - 现代命令链接self.ui.com_btn01.setCheckable(True)self.ui.com_btn01.toggled.connect(lambda: self.button_click(self.ui.com_btn01))self.ui.com_btn02.setCheckable(True)self.ui.com_btn02.setDescription('设置自定义图片')self.ui.com_btn02.setIcon(QIcon(':/res/Resources/image/110.jpg'))self.ui.com_btn02.setIconSize(QSize(50, 50))self.ui.com_btn02.toggled.connect(lambda: self.button_click(self.ui.com_btn02))

在这里插入图片描述

五、QToolButton - 工具栏专用按钮

1.基础功能

①专为工具栏设计,支持多种显示样式,更加紧凑;
②正常的文本工具按钮可以当作普通按钮来进行使用;
③自动提升(AutoRaise)功能,当鼠标指针指向该按钮时,该按钮才会进行 3D 渲染,在正常情况下看起来像一个文本框;
④设置工具按钮样式、箭头工具按钮等功能。

        #普通按钮功能self.ui.T_btn01.setCheckable(True)self.ui.T_btn01.toggled.connect(lambda: self.button_click(self.ui.T_btn01))# 启用自动提升(扁平化样式,鼠标悬停时显示3D效果)self.ui.T_btn02.setAutoRaise(True)# 设置工具按钮样式(重要!)self.ui.T_btn03.setIcon(QIcon(':/res/Resources/image/4.jpeg'))self.ui.T_btn03.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextUnderIcon) # 文本在图标下#箭头工具按钮self.ui.T_btn04.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextUnderIcon)self.ui.T_btn04.setArrowType(Qt.ArrowType.LeftArrow)  #设置箭头方向

在这里插入图片描述

按钮的几种样式呈现方式如下表

ButtonStyle描 述
Qt.ToolButtonStyle.ToolButtonIconOnly0仅显示图标,默认状态
Qt.ToolButtonStyle.ToolButtonTextOnly1仅显示文字
Qt.ToolButtonStyle.ToolButtonTextBesideIcon2文本出现在图标旁边
Qt.ToolButtonStyle.ToolButtonTextUnderIcon3文本出现在图标下方
Qt.ToolButtonStyle.ToolButtonFollowStyle4遵循系统风格设置。在 UNIX 平台上,将使用桌面环境中的用户设置;在其他平台上仅显示图标

箭头的方向几种样现方式如下表

ButtonStyle描 述
Qt.ArrowType.NoArrow0没有箭头,默认状态
Qt.ArrowType.UpArrow1向上箭头
Qt.ArrowType.DownArrow2向下箭头
Qt.ArrowType.LeftArrow3向左箭头
Qt.ArrowType.RightArrow4向右箭头

2.高级特性

①菜单工具按钮功能;
②嵌入工具栏 QToolBar 中。

		# 主菜单self.main_menu = QMenu()# 第一级菜单项undo_action = QAction("撤销", self)redo_action = QAction("重做", self)# 创建"查找和替换"子菜单find_replace_menu = QMenu("查找和替换")# 子菜单项find_action = QAction("查找", self)replace_action = QAction("替换", self)goto_action = QAction("转到", self)find_replace_menu.addAction(find_action)find_replace_menu.addAction(replace_action)find_replace_menu.addAction(goto_action)# 创建"格式"子菜单format_menu = QMenu("格式")# 格式子菜单项font_action = QAction("字体", self)font_action.setData("Font")         # 设置标识数据color_action = QAction("颜色", self)color_action.setData("Color")        # 设置标识数据style_action = QAction("样式", self)style_action.setData("Style")        # 设置标识数据format_menu.addAction(font_action)format_menu.addSeparator()format_menu.addAction(color_action)format_menu.addSeparator()format_menu.addAction(style_action)# 将子菜单添加到主菜单self.main_menu.addAction(undo_action)self.main_menu.addAction(redo_action)self.main_menu.addSeparator()   #添加分割线self.main_menu.addMenu(find_replace_menu)  # 添加子菜单:cite[2]self.main_menu.addMenu(format_menu)  # 添加另一个子菜单# 设置菜单到按钮self.ui.T_btn05.setMenu(self.main_menu)self.ui.T_btn05.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup) #设置弹出模式self.ui.T_btn05.triggered.connect(self.handle_menu_action)# 添加到工具栏self.ui.toolBar.addWidget(self.ui.T_btn05)#    添加其他QAction按钮new = QAction(QIcon(':/res/Resources/image/2.jpeg'), "new", self)self.ui.toolBar.addAction(new)def handle_menu_action(self, action):# 获取动作信息action_text = action.text()action_data = action.data()# 执行相应操作self.ui.lab_Text.setText(f"触发的动作: {action_text}, 标识数据为:{action_data}")

在这里插入图片描述
工具按钮可以通过弹出菜单的方式提供其他选择,使用 setMenu()函数设置弹出的菜单,使用 setPopupMode()函数设置菜单显示的不同模式

模 式描 述
QToolButton.ToolButtonPopupMode.DelayedPopup0按住工具按钮一段时间后,显示菜单
QToolButton.ToolButtonPopupMode.MenuButtonPopup1在此模式下,工具按钮会显示一个特殊的箭头,提示存在菜单。按下按钮的箭头部分会显示菜单
QToolButton.ToolButtonPopupMode.InstantPopup2按下工具按钮后,将立即显示菜单。在此模式下,不会触发按钮本身的动作

总结与选择指南

需求场景推荐按钮类型关键特性
通用操作触发QPushButton文本、图标、样式丰富
工具栏操作QToolButton紧凑、多种显示样式、弹出菜单
单项选择QRadioButton互斥选择、分组管理
多项选择QCheckBox独立选择、支持三态
现代向导界面QCommandLinkButton美观、带描述文本

通过合理选择和配置不同的按钮控件,我们都可以创建出既美观又易用的用户界面

本节源码路径为:PySide6基本窗口控件_按钮类控件(QAbstractButton)

http://www.dtcms.com/a/512029.html

相关文章:

  • iBizModel 工作流(PSWORKFLOW)模型体系详解
  • 装修公司网站源码网站怎样做免费优化有效果
  • 20.1 ChatPPT v3.0颠覆发布:多模态图像识别+AI生成,办公效率提升500%的核心拆解
  • 【PyTorch】单目标检测部署
  • 3D超点(3D Superpoint)概念解释与代码实现
  • TPAMI 2025 | 从分离到融合:新一代3D场景技术实现双重能力提升!
  • malloc/free 内存问题
  • 国企集团门户网站建设方案有什么做数学题的网站
  • CredentialProvider多用户登录实现
  • ‘/‘ 和 ‘./‘在Vite中的区别
  • 技术指南:如何高效地将SOLIDEDGE模型转换为3DXML格式
  • C#上位机工程师技能清单文档
  • 考研408《操作系统》复习笔记,第二章《2.4 同步互斥》
  • 复现AB3DMOT 3D目标跟踪
  • 两种方法解决SQL连续登录问题
  • 一种简易的python c++协同定位和dump数据的方式
  • 蒙帕视角丨图像高效端到端目标检测
  • 孟村网站建设虚拟资源站码支付wordpress
  • xv6 源码精读(二)开启MMU、一致性映射页表
  • 珠海网站建设尚古道策略长沙口碑好网站建设公司
  • =word插入公式后行距变大怎么办?-笔记
  • Android 接入 Google 和 Facebook 第三方登录指南(初始版)
  • Aspose.words关于builder.CellFormat.Width、row.Cells[0].CellFormat.Width的设置单元格宽度区别
  • 罗湖网站建设的公司哪家好阳泉做网站公司
  • 口碑好的共晶贴片机公司
  • 挑战概率直觉:蒙提霍尔问题的解密与应用
  • 网站域名哪些后缀更好给自己公司做个网站
  • 算法笔记 07
  • Steps + Input.TextArea + InfiniteScroll 联调优化
  • /dev/mem 原理及使用