Skip to content

Commit 0743ebf

Browse files
committed
Add 03-12-05-03
QMessageBox-按钮
1 parent f8403af commit 0743ebf

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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

Comments
 (0)