PyQt5中的按钮4-QDialogButtonBox


本文大部分内容来自网络。
参考1: https://www.cnblogs.com/LaoYuanPython/p/12235173.html

QDialogButtonBox介绍

  • dialogButtonBox按钮盒是Qt提供的可以快速地布置一组按钮的组件,Qt定义了一系列标准按钮,可以通过在Designer中简单勾选就可以在界面上部署一组按钮。

  • dialogButtonBox的对应类是QDialogButtonBox,该类是从QWidget类继承的,也是Buttons部件中唯一不从QAbstractButton继承的组件,因为dialogButtonBox是一组按钮的容器,本身并不是按钮。

QDialogButtonBox常用方法和属性

名称含义
addButton在QDialogButtonBox添加按钮,可以是自定义按钮,也可以是标准按钮,可直接指明方向。
buttonRole标准按钮有其固定的role,而自定义按钮要设定buttonRole
setOrientation按钮部署的方向想,水平或者垂直方向
setCenterButtonsQDialogButtonBox对象中的按钮居中对齐
setStandardButtons设置QDialogButtonBox对象中包含的标准按钮

QDialogButtonBox的常用信号

  • QDialogButtonBox中可以包含多个pushButton,但QDialogButtonBox本身只提供4种信号,分别是accepted、rejected、clicked和helpRequested。
  • 点击这些按钮除了都会产生clicked信号之外,还会可能产生accepted(表示接受对话的内容)、rejected(表示拒绝对话的内容)、helpRequested(表示寻求帮助)这三个信号。
  • 缺省状态下,不同的按钮会产生对应的缺省信号。
按钮信号
Yes产生accepted信号
Yes to All产生accepted信号
OK产生accepted信号
Save产生accepted信号
Save All产生accepted信号
Open产生accepted信号
Retry产生accepted信号
Ignore产生accepted信号
Discard不产生accepted、rejected、helpRequested信号
No产生rejected信号
No to All产生rejected信号
Abort产生rejected信号
Close产生rejected信号
Cancel产生rejected信号
Apply、 Reset、 Restore Defaults不产生accepted、rejected、helpRequested信号
Help产生helpRequested信号

ButtonRole

  • 在Designer中创建的QDialogButtonBox对应的Button,都有指定的ButtonRole,而我们创建自定义的Button加入到QDialogButtonBox中去时,也需要设定该按钮的ButtonRole。
  • 系统根据你设置的ButtonRole来安排按键的位置。

ButtonRole含义

ButtonRole主要有如下三个作用:

  • 同一种ButtonRole的角色,界面风格相同,同一种ButtonRole的按钮在排列时应该依次连续排列
  • 同一种ButtonRole的角色所能发送的信号相同
  • 给自定义Button加入QDialogButtonBox时进行初始化以简单快捷实现。

ButtonRole和标准button的对应关系

ButtonRole标准按钮
AcceptRoleIgnore、Ok、Open、Retry、Save、SaveAll、Apply
DestructiveRoleDiscard
HelpRoleHelp
NoRoleNo、NoToAll
RejectRoleCancel、Close、Abort
ResetRoleReset、RestoreDefaults
YesRoleYes、YesToAll

QDialogButtonBox举例

  • 先定义各个QDialogButtonBox对象,然后布局。
    在这里插入图片描述
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QDialogButtonBox,
                             QMessageBox, QPushButton, QVBoxLayout)


class DemoDialogButtonBox(QWidget):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("QDialogButtonBox Demo!")
        self.resize(500, 240)
        bt1 = QPushButton("information")

        # 所需要的按钮,父窗口
        dbb_ok_cancel = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
        # 在原标准按钮基础上增加pushbutton, 指定其buttonrole
        dbb_ok_cancel.addButton(bt1, QDialogButtonBox.AcceptRole)
        # 设置某个按钮的default状态
        dbb_ok_cancel.button(QDialogButtonBox.Cancel).setDefault(True)
        # 在原标准按钮基础上使用addButton方法再增加标准按钮
        dbb_ok_cancel.addButton(QDialogButtonBox.No)

        dbb_ok_cancel.accepted.connect(self.slot_accept)
        dbb_ok_cancel.rejected.connect(self.slot_reject)

        dbb_ari = QDialogButtonBox(QDialogButtonBox.Abort | QDialogButtonBox.Retry | QDialogButtonBox.Ignore, self)
        dbb_ari.accepted.connect(self.slot_accept)
        dbb_ari.rejected.connect(self.slot_reject)
        dbb_ari.setOrientation(Qt.Vertical)

        # 添加自定义按钮
        btn_add = QPushButton('加法', self)
        btn_sub = QPushButton('减法', self)
        btn_mul = QPushButton('乘法', self)
        btn_div = QPushButton('除法', self)

        # 先定义空的QDialogButtonBox, 使用addButton方法,添加自定义按钮,指明方向
        dbb_vert = QDialogButtonBox(Qt.Vertical, self)
        dbb_vert.addButton(btn_add, QDialogButtonBox.AcceptRole)
        dbb_vert.addButton(btn_sub, QDialogButtonBox.AcceptRole)
        dbb_vert.addButton(btn_mul, QDialogButtonBox.AcceptRole)
        dbb_vert.addButton(btn_div, QDialogButtonBox.AcceptRole)

        dbb_vert.accepted.connect(self.slot_accept)
        dbb_vert.rejected.connect(self.slot_reject)

        # 在布局中添加各个QDialogButtonBox对象
        vbox = QVBoxLayout(self)
        # 设置各个widget之间的间隔
        vbox.setSpacing(50)
        vbox.addWidget(dbb_ok_cancel)
        vbox.addWidget(dbb_ari)
        vbox.addWidget(dbb_vert)

    def slot_accept(self):
        QMessageBox.information(self, '信息', 'accepted!!!')

    def slot_reject(self):
        QMessageBox.information(self, '信息', 'rejected!!!')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoDialogButtonBox()
    window.show()
    sys.exit(app.exec())
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值