当前位置:   article > 正文

PyQt5中的按钮4-QDialogButtonBox_pyqt5 buttonbox

pyqt5 buttonbox


本文大部分内容来自网络。
参考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())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/271324
推荐阅读
相关标签
  

闽ICP备14008679号