找回密码
 立即注册
Qt开源社区 门户 查看内容

PyQt5:工具按钮

2019-10-28 06:09| 发布者: admin| 查看: 647| 评论: 0

摘要: 上期我们介绍了PyQt中的按钮(QLabel),这期我们再来介绍一下PyQt中另一个按钮(QToolButton)。正文1总体介绍QToolButton类为命令或选项提供快速访问按钮,通常在QToolBar中使用。工具按钮是一个特殊的按钮,可以快 ...


上期我们介绍了PyQt中的按钮(QLabel),这期我们再来介绍一下PyQt中另一个按钮(QToolButton)。


正文

1

总体介绍


QToolButton类为命令或选项提供快速访问按钮,通常在QToolBar中使用。

工具按钮是一个特殊的按钮,可以快速访问特定的命令或选项。与普通命令按钮相反,工具按钮通常不显示文本标签,而是显示一个图标。

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

工具按钮的一个经典用途是选择工具;例如绘图程序中的“笔”工具。这将通过使用QToolButton作为切换按钮来实现。

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

工具按钮的图标被设置为QIcon。这使得可以为禁用和活动状态指定不同的像素图。当按钮的功能不可用时使用禁用的pixmap。当鼠标指针悬停在按钮上时,显示活动像素图。

按钮的外观和尺寸可以通过setToolButtonStyle()和setIconSize()来调整。在QMainWindow的QToolBar中使用时,该按钮自动调整为QMainWindow的设置。工具按钮也可以显示箭头符号,而不是一个图标,用arrowType指定。

工具按钮也可以使用弹出按钮。弹出菜单可以使用setMenu()来设置。使用setPopupMode()来配置菜单设置的工具按钮可用的不同模式。默认模式是DelayedPopupMode,它有时与Web浏览器中的“后退”按钮一起使用。按下按钮一会儿,弹出一个菜单,显示可跳转到的页面列表。

更多的介绍请将官网:https://doc.qt.io/qt-5/qtoolbutton.html

二维码直达:



2

小例子


我们以360浏览器为例,工具栏上面有一个网银的按钮,如下图:



我们这个例子,就是模拟一下。

部分核心代码


需要全屏展示,录个屏算了。



classExample(QWidget):    definitUI(self):        tb = QToolButton(self)        tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
       # tb.setArrowType(Qt.DownArrow)        tb.setToolTip('选择适合你的支付方式')        tb.setPopupMode(QToolButton.MenuButtonPopup)        tb.setText('支付方式')        tb.setIcon(QIcon('icon/bank.ico'))        tb.setAutoRaise(True)        menu = QMenu(self)        self.alipayAct = QAction(QIcon('icon/alipay.ico'),'支付宝支付', self)        self.wechatAct = QAction(QIcon('icon/wechat.ico'),'微信支付', self)        self.visaAct = QAction(QIcon('icon/visa.ico'),'Visa卡支付', self)        self.master_cardAct = QAction(QIcon('icon/master_card.ico'),'万事达卡支付', self)        menu.addAction(self.alipayAct)        menu.addAction(self.wechatAct)        menu.addSeparator()        menu.addAction(self.visaAct)        menu.addAction(self.master_cardAct)        tb.setMenu(menu)        self.show()        self.alipayAct.triggered.connect(self.on_click)        self.wechatAct.triggered.connect(self.on_click)        self.visaAct.triggered.connect(self.on_click)        self.master_cardAct.triggered.connect(self.on_click)
     
   defon_click(self):        if self.sender() == self.alipayAct:            QDesktopServices.openUrl(QUrl('https://www.alipay.com/'))
       elif self.sender() == self.wechatAct:            QDesktopServices.openUrl(QUrl('https://pay.weixin.qq.com/index.php'))
       elif self.sender() == self.visaAct:            QDesktopServices.openUrl(QUrl('https://www.visa.com.cn/'))
       else:            QDesktopServices.openUrl(QUrl('https://www.mastercard.com.cn/zh-cn.html'))

在这个例子中,当我们鼠标移到工具按钮上才会呈现出来,而且有图标和文字信息。

3

代码解析

tb = QToolButton(self)
新建一个QToolButton对象。
tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
该属性保持工具按钮是仅显示图标,仅显示文本,还是显示图标旁边/下方的文本。默认是Qt.ToolButtonIconOnly。要使工具按钮的样式遵循系统设置,请将此属性设置为Qt.ToolButtonFollowStyle。 在Unix上,将使用来自桌面环境的用户设置。 在其他平台上,Qt.ToolButtonFollowStyle只意味着图标。

工具按钮的样式,描述按钮的文本和图标应该如何显示:
属性描述
ToolButtonIconOnly只显示图标
ToolButtonTextOnly只显示文字
ToolButtonTextBesideIcon文字出现在图标旁边
ToolButtonTextUnderIcon文字出现在图标下方
ToolButtonFollowStyle遵循QStyle.StyleHint
# tb.setArrowType(Qt.DownArrow)
这句话我做了注释,是为了给大家演示一下。大家可以看下没有注释的效果,如下图:



出现了一个三角形。

setArrowType(Qt.ArrowType)
设置按钮是否显示一个箭头,而不是一个正常的图标。这将显示一个箭头作为QToolButton的图标。 默认情况下,这个属性被设置为Qt.NoArrow。

具体的描述如下:



tb.setToolTip('选择适合你的支付方式')
这个很好理解,就是一个小贴士,当鼠标移动到按钮的时候就会显示信息。
tb.setPopupMode(QToolButton.MenuButtonPopup)
描述了弹出式菜单与工具按钮一起使用的方式:
属性描述
QToolButton.DelayedPopup按下按钮一定时间后,显示菜单。一个典型案例:浏览器中工具栏的“后退”按钮。
QToolButton.MenuButtonPopup这种模式下,工具按钮显示一个特殊的箭头以指示菜单是否存在,按下按钮的箭头部分时显示菜单。
QToolButton.InstantPopup按下工具按钮时菜单显示,无延迟。这种模式下,按钮自身的动作不触发。

还是用图片来得更直观些:

QToolButton.DelayedPopup



QToolButton.MenuButtonPopup



QToolButton.InstantPopup



tb.setText('支付方式')tb.setIcon(QIcon('icon/bank.ico'))
设置图标和文字。
tb.setAutoRaise(True)
此属性保持是否启用自动升起。默认是禁用的(即False)。当使用QMacStyle时,此属性在macOS上当前被忽略。



self.alipayAct = QAction(QIcon('icon/alipay.ico'),'支付宝支付', self)self.wechatAct = QAction(QIcon('icon/wechat.ico'),'微信支付', self)self.visaAct = QAction(QIcon('icon/visa.ico'),'Visa卡支付', self)self.master_cardAct = QAction(QIcon('icon/master_card.ico'),'万事达卡支付', self)
新建QAction对象,What’s the QAction?


QAction类提供了可以插入到窗口小部件中的抽象用户界面操作。

在应用程序中,可以通过菜单,工具栏按钮和键盘快捷键调用许多常用命令。由于用户期望每个命令都以相同的方式执行,所以无论使用哪个用户界面,都将每个命令表示为一个动作是有用的。

操作可以添加到菜单和工具栏,并会自动保持同步。例如,在文字处理器中,如果用户按下粗体工具栏按钮,粗体菜单项将被自动检查。

动作可以创建为独立的对象,但也可以在菜单的构建过程中创建。 QMenu类包含用于创建适合用作菜单项的操作的便捷功能。

QAction可能包含图标,菜单文本,快捷方式,状态文本,“这是什么?”文本和工具提示。其中大部分可以在构造函数中设置。它们也可以用setIcon(),setText(),setIconText(),setShortcut(),setStatusTip(),setWhatsThis()和setToolTip()独立设置。对于菜单项,可以使用setFont()设置单个字体。

通俗点说:就是菜单或者按钮中需要执行的操作。
self.alipayAct.triggered.connect(self.on_click)self.wechatAct.triggered.connect(self.on_click)self.visaAct.triggered.connect(self.on_click)self.master_cardAct.triggered.connect(self.on_click)
当用户激活动作时发出此信号。例如,当用户点击菜单选项,工具栏按钮,或者按动作的快捷键组合,或者当调用trigger()时。值得注意的是,当setChecked()或toggle()被调用时,它不会被发射。

当我们执行各个菜单的时候发出这个信号,然后连接到我们的槽函数。
defon_click(self):    if self.sender() == self.alipayAct:        QDesktopServices.openUrl(QUrl('https://www.alipay.com/'))
   elif self.sender() == self.wechatAct:        QDesktopServices.openUrl(QUrl('https://pay.weixin.qq.com/index.php'))
   elif self.sender() == self.visaAct:        QDesktopServices.openUrl(QUrl('https://www.visa.com.cn/'))
   else:        QDesktopServices.openUrl(QUrl('https://www.mastercard.com.cn/zh-cn.html'))

  1. 首先判断我们激活了哪个菜单

  2. 其次调用QDesktopServices类的openUrl方法,去打开特定的支付页面。也就是说调用系统默认的浏览器去打开指定的网页。QUrl类为使用URL提供了一个方便的接口。


4

最后


ok,今天的介绍暂时就到这里吧,下期会对按钮部分进行一个综合的概述。如果你喜欢本篇文章,请给我点赞、赞赏(推荐,

),分享给你的好友们吧!

如果你想要本次教程中的相关源码,请关注微信公众号:学点编程吧,发送pyqt523,会自动得到相应的百度网盘下载链接。

题外话:本周的PyQt5就更新这一个吧!家人生病需要照顾。秋冬季是呼吸系统疾病高发期,各位要保重身体。身体最重要!



加入我们的学习交流QQ群,一起学习吧!



苹果用户也能支持一下啦,长按二维码扫描吧!



看完本文有收获?请转发分享给更多人




猜你喜欢:

更多的PyQt5文章请在微信公众号/在线课程/图文教程中查找。




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:学点编程吧,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了