|
| 1 | +import sys |
| 2 | + |
| 3 | +from PySide6 import QtWidgets |
| 4 | + |
| 5 | +""" |
| 6 | +QMessageBox 按钮 |
| 7 | +
|
| 8 | +对于每个按钮,需要为其定义「按钮角色」,如“接受”、“拒绝”、“应用”等(详见附录枚举值列表),用于描述按钮行为, |
| 9 | +便于QMessageBox对不同角色的按钮进行处理,而与按钮上显示的文字无关。 |
| 10 | +
|
| 11 | +同时消息提示框也提供了大量可选的标准按钮(详见枚举值列表),覆盖了绝大多数使用场景,一般直接添加标准按钮即可 |
| 12 | +
|
| 13 | +一般直接设置标准按钮即可,将多个标准按钮用"|"连接传入即可: |
| 14 | +.setStandardButtons(buttons: QMessageBox.StandardButtons) 设置标准按钮 |
| 15 | +.standardButtons() -> QMessageBox.StandardButtons 获取当前设置的标准按钮 |
| 16 | +
|
| 17 | +添加按钮函数有3种重载,返回值也有所不同,调用时需要注意参数: |
| 18 | +.addButton(button: QAbstractButton, role: QMessageBox.ButtonRole) -> None 将按钮button添加到信息提示框并赋予指定的角色 |
| 19 | +.addButton(text: str, role: QMessageBox.ButtonRole) -> QPushButton 使用给定的text创建按钮,并按给定的角色添加 |
| 20 | +.addButton(button: QMessageBox.StandardButton) -> QPushButton 向信息提示框中添加标准按钮,并返回该按钮 |
| 21 | +
|
| 22 | +还可以指定默认按钮(用户在对话框交互时直接按下Enter激活的按钮)、Esc按钮(用户按下键盘Esc键时触发的按钮) |
| 23 | +.setDefaultButton(button: QPushButton) -> None 将button设置为信息提示框的默认按钮 |
| 24 | +.setEscapeButton(button: QAbstractButton) -> None 若用户通过键盘Esc键与对话框交互,则激活button按钮 |
| 25 | +
|
| 26 | +获取按钮、按钮角色: |
| 27 | +.button(which: QMessageBox.StandardButton) -> QAbstractButton 通过标准按钮返回该按钮的实例 |
| 28 | +.buttons() -> List[QAbstractButton] 返回已经添加的按钮的列表 |
| 29 | +.buttonRole(button: QAbstractButton) -> QMessageBox.ButtonRole 返回特定按钮的角色,若按钮为None或未被添加则返回InvalidRole |
| 30 | +
|
| 31 | +若需移除按钮,则调用removeButton并将按钮作为参数传入: |
| 32 | +.removeButton(button: QAbstractButton) -> None 从按钮框中移除button但不删除它 |
| 33 | +
|
| 34 | +""" |
| 35 | + |
| 36 | + |
| 37 | +class MyWidget(QtWidgets.QWidget): |
| 38 | + def __init__(self, *args, **kwargs): |
| 39 | + super().__init__(*args, **kwargs) |
| 40 | + self.setWindowTitle("QMessageBox-按钮") |
| 41 | + self.resize(800, 600) |
| 42 | + self.message_box = QtWidgets.QMessageBox(self) # 创建对话框 |
| 43 | + self.setup_message_box() |
| 44 | + self.setup_ui() |
| 45 | + |
| 46 | + def setup_ui(self) -> None: |
| 47 | + """设置界面""" |
| 48 | + |
| 49 | + # 在主界面上弹出对话框 |
| 50 | + pop_btn = QtWidgets.QPushButton("弹出对话框", self) |
| 51 | + pop_btn.move(200, 200) |
| 52 | + pop_btn.clicked.connect(self.message_box.open) # type: ignore |
| 53 | + |
| 54 | + def setup_message_box(self) -> None: |
| 55 | + """设置对话框""" |
| 56 | + |
| 57 | + self.message_box.setWindowTitle("按钮功能测试") |
| 58 | + self.message_box.setText("一段对话框正文文本") |
| 59 | + |
| 60 | + # 设置标准按钮 |
| 61 | + self.message_box.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel) |
| 62 | + |
| 63 | + # 设置默认按钮、Esc按钮 |
| 64 | + self.message_box.setDefaultButton( |
| 65 | + self.message_box.button(QtWidgets.QMessageBox.Ok) |
| 66 | + ) # 通过.button()方法返回按钮实例 |
| 67 | + self.message_box.setEscapeButton(self.message_box.button(QtWidgets.QMessageBox.Cancel)) |
| 68 | + |
| 69 | + # 添加按钮 |
| 70 | + self.message_box.addButton("自定义按钮", QtWidgets.QMessageBox.AcceptRole) # 通过自定义文本与按钮角色添加 |
| 71 | + discard_btn = self.message_box.addButton(QtWidgets.QMessageBox.Discard) # 添加标准按钮,返回值为按钮实例 |
| 72 | + |
| 73 | + # 获取按钮角色 |
| 74 | + print(self.message_box.buttonRole(discard_btn)) # 将discard_btn按钮的角色打印到终端 |
| 75 | + |
| 76 | + # 移除按钮 |
| 77 | + self.message_box.removeButton(discard_btn) # 将按钮实例作为参数传入即可移除 |
| 78 | + |
| 79 | + # 如果有按钮被按下,则将该按钮的文本打印到终端。此信号会在“QMessageBox-信号”小节中讲解。 |
| 80 | + self.message_box.buttonClicked.connect(lambda btn: print(btn.text())) # type: ignore |
| 81 | + |
| 82 | + |
| 83 | +if __name__ == "__main__": |
| 84 | + app = QtWidgets.QApplication(sys.argv) |
| 85 | + window = MyWidget() |
| 86 | + window.show() |
| 87 | + sys.exit(app.exec()) |
0 commit comments