PyQt5中的按钮4-DemoDialogButtonBox
本文大部分内容来自网络。
参考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 | 按钮部署的方向想,水平或者垂直方向 |
setCenterButtons | QDialogButtonBox对象中的按钮居中对齐 |
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 | 标准按钮 |
---|---|
AcceptRole | Ignore、Ok、Open、Retry、Save、SaveAll、Apply |
DestructiveRole | Discard |
HelpRole | Help |
NoRole | No、NoToAll |
RejectRole | Cancel、Close、Abort |
ResetRole | Reset、RestoreDefaults |
YesRole | Yes、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())