Pyside6 工具按钮QTooButton及工具栏QToolBar

一、工具按钮QToolButton

1.QToolButton的介绍(官翻)

工具按钮是一种特殊的按钮,提供对特定命令或选项的快速访问。与普通的命令按钮不同,工具按钮通常不显示文本标签,而是显示一个图标。

工具按钮通常是在使用addAction()创建新的QAction实例或使用addAction()将现有操作添加到工具栏时创建的。也可以像构造其他部件一样构造工具按钮,并在布局中将它们与其他部件排列在一起。

工具按钮的一个经典用法是选择工具;例如,绘图程序中的“钢笔”工具。这可以通过使用QToolButton作为切换按钮来实现(参见setCheckable())。

QToolButton支持自动提升。在auto-raise 模式下,只有当鼠标指向它时,按钮才会绘制一个3D帧。当在QToolBar中使用按钮时,该功能会自动打开。用setAutoRaise()修改它。

工具按钮图标设置为QIcon。这使得为禁用和激活状态指定不同的像素映射成为可能。当按钮的功能不可用时,将使用禁用的pixmap。当按钮自动升起时,会显示活动的像素图,因为鼠标指针悬停在它上面。

通过setToolButtonStyle()和setIconSize()可以调整按钮的外观和尺寸。当在QMainWindow的QToolBar中使用时,该按钮自动调整到QMainWindow的设置(参见setToolButtonStyle()和setIconSize())。除了图标,工具按钮还可以显示用arrowType指定的箭头符号。

工具按钮可以在弹出菜单中提供额外的选择。可以使用setMenu()设置弹出菜单。使用setPopupMode()来配置带有菜单集的工具按钮的不同模式。默认模式是DelayedPopupMode,有时与web浏览器中的“返回”按钮一起使用。长按这个按钮一段时间后,会弹出一个菜单,列出要跳转的页面列表。超时时间取决于样式,参见SH_ToolButton_PopupDelay。

2.QToolButton的常用方法

API函数

参数说明

返回值

功能作用

QToolButton(parent)

parent:

QWidget

None

创建一个工具按钮

setArrowType(self, type)

type: Qt.ArrowType

None

按钮图标被替换为一个箭头进行显示

arrowType(self)

None

Qt.ArrowType

获取按钮箭头的显示类型

setText(self, text)

text:

str

None

设置动作的显示文本

text(self)

None

str

获取动作的显示文本

setIcon(self, icon)

icon: Union[QIcon, QPixmap]

None

设置动作的图标

icon(self)

None

QIcon

获取动作的图标

setDefaultAction(self, arg__1)

arg_1: QAction

None

设置默认动作,以粗体字显示

defaultAction(self)

None

QAction

获取菜单的默认动作

hitButton(self, pos)

pos:QPoint

bool

设置按钮点击的有效区域

setMenu(self, menu)

menu:QMenu

None

设置菜单

menu(self)

None

None

获取菜单

showMenu(self)

None

None

弹出菜单

minimumSizeHint(self)

None

QSize

返回按钮的最小尺寸

setPopupMode(self, mode)

mode:

QToolButton.

ToolButtonPopupMode

None

设置菜单的弹出方式

popupMode(self)

None

mode:

QToolButton.

ToolButtonPopupMode

获取菜单的弹出方式

setToolButtonStyle(self, toolButtonStyle)

toolButtonStyle:

Qt.ToolButtonStyle

None

设置工具按钮风格

toolButtonStyle(self)

None

Qt.ToolButtonStyle

获取工具按钮风格

sizeHint(self)

None

QSize

返回按钮的建议尺寸

autoRaise(self)

None

bool

获取是否启用自动提升

setAutoRaise(self, enable)

enable: bool

None

设置是否启用自动提升

1) 工具按钮和QToolButton的含义

QToolButoon继承自QAbstractButton,所以他拥有按压按钮的一起特征。通常我们会理解为其是专门作为工具栏中使用的按钮而设置的。

但,我们看前面官翻中看到,“工具按钮通常是在使用addAction()创建新的QAction实例或使用addAction()将现有操作添加到工具栏时创建的。”看到这句话是否很懵逼,怎么工具按钮的创建和QAction的创建和添加有毛关系。事实是,工具栏只接受QAction作为子控件进行添加。但在使用工具栏时其会有QToolBar.setWidget()这个方法,这个方法的参数是QWidget及其子类,表现的好像其能够直接将QWidget及其子类添加到工具栏中使用。大家可以试验一下,使用QToolBar.setWidget()添加几个控件,在打印QToolBar.actions()看一下结果就会发现,所有被添加进去的QWidget及其子类都是变为了QWigetAction类。在QWidgetAction章节也说过,QWidgetAction是QAction的子类,所以才说,工具栏只接受QAction作为子控件。

针对官翻中那句话,那么个人理解这句话中的工具按钮就不是仅仅指QToolButton,而是指“具有工具按钮性质”的这些按钮,这些按钮可能是QToolButton创建的,也可能是QAction,或者是QWidgetAction创建的。工具按钮的性质也可以概括为:“提供对特定命令或选项的快速访问。与普通的命令按钮不同,工具按钮通常不显示文本标签,而是显示一个图标”。所以,官翻原文中的工具按钮和QToolButton要分开理解。

2) QToolButton在工具栏和在其他QWidget子类面板中的表现形式

QToolButton作为一个QWidget的可视化子类,其父控件为QWidget,仅仅设置icon和text的时候外观与其被添加到工具栏中的QAction类似,但这是由于其默认情况,setAutoRaise(True);当setAutoRaise(Flase)时,其外观与QPushButton类似。另外,QToolButton添加进工具栏后所表现的样式与QAction一致(前面也说了,他实际就变为一个QWigetAction了)。

3)QToolButton的图标与文字位置、指示箭头的设置。

setToolButtonStyle( )是针对QToolButton在显示时,图标与文本的显示设置,其是一个枚举类:

枚举类

枚举常量

枚举值

功能描述

Qt.ToolButtonStyle

ToolButtonIconOnly

只显示图标

ToolButtonTextOnly

只显示标题

ToolButtonTextBesideIcon

标题在图标旁边

ToolButtonTextUnderIcon

文本在图标下侧

ToolButtonFollowStyle

跟随QStyle风格

setArrowType( )会强制生成一个三角形箭头(丑到爆)图标,默认情况下是NoArrow。如果工具栏创建时有添加图标,则会用三角形箭头替代图标。其参数是一个枚举类:

枚举类

枚举常量

枚举值

功能描述

Qt.ArrowType

NoArrow

不显示箭头

UpArrow

向上箭头

DownArrow

向下箭头

LeftArrow

向左箭头

RightArrow

向右箭头

说白了,这个箭头就是指示通过setMenu()所设置menu的弹出方向,但是它不能控制menu的弹出方向,仅仅起到一个外观指示的作用。这种情况下就需要我们重写他的PressedEvent事件,在其pressedEvent事件中添加菜单和弹出菜单,并实现弹出位置与箭头的方向的匹配。

4)QToolButton的菜单弹出

上一小节我们说了重写他的PressedEvent事件从而弹出菜单,这种方式显得很笨拙,同时,哪个三角箭头太丑了,还要改样式。但是,QToolButton是可以设置菜单的,当我们通过setMenu()方法将菜单设置给QToolButton后,QToolButton会在右下角显示一个很小的三角标识这个QToolButton拥有菜单。同时,点击QToolButton,菜单不是同步弹出的,而是有延迟,需要按住鼠标。menu的弹出方式由setPopupMode( )来控制,其参数也是一个枚举类:

枚举类

枚举常量

枚举值

功能描述

QToolButton.ToolButtonPopupMode

DelayedPopup

在按住工具按钮一段时间后(超时时间取决于样式,参见SH_ToolButton_PopupDelay),菜单显示出来。一个典型的应用例子是某些浏览器工具栏中的“后退”按钮。如果用户单击它,浏览器会简单地浏览回上一页。如果用户长按该按钮一段时间,工具按钮将显示一个包含当前历史记录列表的菜单

MenuButtonPopup

工具按钮显示一个特殊的箭头,以表明有一个菜单。当按下按钮的箭头部分时,菜单就会显示出来。

InstantPopup

当按下工具按钮时,菜单立即显示。在这种模式下,按钮本身的动作不会被触发。

可见,我们上面说的如果给QToolButton设置菜单,点击它延迟弹出的情况就是默认情况下菜单弹出的模式为DelayedPopup。

当我们将菜单模式设置为MenuButtonPopup是,显示样式是这样的:

这就和我们前面学习工具栏中添加带子菜单的QAction样式一样了。

还有一个现象,如果工具栏中先添加QAction,后为QAction设置子菜单,他的样式和工具按钮的DelayedPopup模式样式一致。而先为QAction添加子菜单,后将QAction添加到工具栏,他的样式又与工具按钮的DelayedPopup模式样式一致。

实际上,将QToolButton与QToolBar一起学习并不合适,应该将其与QToolBox一起学习。QToolBox与QToolButton一起才是真的适配。看下图:

这是一张早起的QQ的界面,左面的主界面框架中重要的部分就是QToolBox特征,而其中每个好友的头像位置实际我们就可以使用QToolButton来实现,头像就是icon,好友的名字就是text,那么QToolButton的ToolButtonStyle肯定就是ToolButtonTextBesideIcon。

我们将会在学完QToolBox以后,模拟这个早期的QQ编写一个可用的界面。

3.QToolButton的信号

信号

参数说明

返回值

功能作用

triggered(QAction)

QAction

None

按钮按下时发射此信号,参数为引起信号发出的动。

pressed()

None

按下按钮时发射信号,同时将参数传递给槽函数

released()

None

释放按钮时发射信号,同时将参数传递给槽函数

clicked()

bool

点击按钮(按下和释放)时发射信号,同时将参数传递给槽函数

二、工具栏QToolBar

1.QToolBar的介绍(官翻)

工具栏通常通过调用addToolBar(const QString &title)创建,但它也可以作为QVBoxLayout中的第一个部件添加。

工具栏按钮是通过添加操作来添加的,可以使用addAction()或insertAction()。可以使用addSeparator()或insertSeparator()来分隔一组按钮。如果工具栏按钮不合适,可以使用addWidget()或insertWidget()插入小部件。合适的小部件示例有QSpinBox、QDoubleSpinBox和QComboBox。当工具栏按钮被按下时,它会发出actionTriggered()信号。

工具栏可以固定在特定区域(例如窗口顶部),也可以在工具栏区域之间移动;请参见setMovable()、isMovable()、allowedAreas()和isAreaAllowed()。

当工具栏太小而无法显示它所包含的所有项目时,一个扩展按钮将作为工具栏的最后一个项目出现。按下扩展按钮将弹出一个包含项目的菜单,目前不适合在工具栏。

当QToolBar不是QMainWindow的子组件时,它就失去了用addWidget()添加到工具栏的小部件填充扩展弹出框的能力。请使用通过继承QWidgetAction并实现createWidget()创建的widget操作。

2.QToolBar的常用方法

API函数

参数说明

返回值

功能作用

QToolBar(title, parent)

tilte:str

parent:QWidget

None

创建一个工具栏

QToolBar( parent)

parent:QWidget

None

创建一个工具栏

addAction(self,action)

action:QAction

None

在工具栏中添加新动作

addAction(self,text)

text:str

QAction

在工具栏中添加新动作

addAction(self,icon,text)

icon:QIcon

text:str

QAction

在工具栏中添加新动作

addSeparator(self)

None

QAction

添加一个分割线

insertSeparator(self, before)

before:QAction

QAction

在一个动作前添加一个分割线

clear(self)

None

None

清空工具栏

actionAt(self, arg__1)

arg_1:QPoint

QAction

获取指定坐标处的动作

actionAt(self, x,y)

x:int,y:int

QAction

获取指定坐标处的动作

actionGeometry(self, arg__1)

arg_1: QAction

QRect

返回动作的几何矩形

addWidget(self, widget)

widget:QWidget

QAction

添加控件,返回控件关联的动作

insertWidget(self, before, widget)

befor:QACTION

widget:QWidget

QAction

在动作前插入控件

widgetForAction(self, action)

QAction

QWidget

获取与动作关联的控件

setAllowedAreas(self, areas)

areas: Qt.ToolBarArea

None

设置工具栏在QMainWindow中可停靠的区域

allowedAreas(self)

None

Qt.ToolBarArea

获取工具栏在QMainWindow中可停靠的区域

isAreaAllowed(self, area)

None

areas: Qt.ToolBarArea

获取指定的区域是否可以停靠

setIconSize(self, iconSize)

iconSize:QSize

None

设置工具栏中图标的允许最大尺寸

iconSize(self)

None

QSize

获取设置工具栏中图标尺寸

setFloatable(self, floatable)

floatable:bool

None

设置工具栏在QMainWindow中是否可以浮动

isFloatable(self)

None

bool

获取工具栏是否可以浮动

isFloating(self)

None

bool

获取工具栏是否处于浮动状态

setMovable(self, movable)

movable :bool

None

设置工具栏在QMainWindow中是否可以拖动

isMovable(self)

None

bool

获取工具栏在QMainWindow中是否可以拖动

setOrientation(self, orientation)

orientation:

Qt.Orientation

None

设置工具栏的方向

orientation(self)

None

Qt.Orientation

获取工具栏的方向

setToolButtonStyle(self, toolButtonStyle)

toolButtonStyle: Qt.ToolButtonStyle

None

设置工具栏上的按钮风格

toolButtonStyle(self)

None

Qt.ToolButtonStyle

获取工具栏上的按钮风格

toggleViewAction(self)

None

QAction

切换停靠窗口的可见状态

工具栏前面已经用过多次,这里不再过多讲解,他的方法说明都很好理解。这里主要解释一下

setAllowedAreas(self, areas)、setFloatable(self, floatable)、setMovable(self, movable)、setOrientation(self, orientation)、toggleViewAction(self)这几个方法,这几个方法通常是QToolBar放置在QMainWindow中使用时才有的特性。QMainWindow是一个设置好的主界面,在这个界面中,已经内置了QToolBar。离开QMainWindow,这几个方法也就基本不起作用。这几个方法的具体的使用我们将在QMainWindow中进行学习。

3.QToolBar的信号

信号

参数说明

返回值

功能作用

actionTriggered(QAction)

QAction

动作被触发时发送信号

iconSizeChanged(QSize)

QSize

按钮尺寸发生改变时发送信号

movableChanged(bool)

bool

可移动状态发生改变时发送信号

orientationChanged(Qt. Orientation)

Qt. Orientation

工具栏方向发生改变时发送信号

toolButtonStyleChanged(Qt.ToolButtonStyle)

Qt.ToolButtonStyle

工具栏的风格发生改变时发送信号

topLevelChanged(bool)

bool

悬浮状态发生改变时发送信号

visibilityChanged(bool)

bool

可见状态发生改变时发送信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值