Skip to content

Commit cebb4c3

Browse files
committed
Add 03-02-02-04
QPushButton 默认与自动默认
1 parent 794796f commit cebb4c3

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
"""
2+
QPushButton 默认按钮与自动默认
3+
4+
建议参考:https://doc.qt.io/qt-6/qpushbutton.html#default-prop
5+
因为涉及对话框相关内容,首次学习时可略过此节,待学习对话框章节之后再回顾本节
6+
7+
===================================default属性=============================
8+
默认和自动默认按钮决定当用户在对话框中按下 Enter 时会发生什么。
9+
10+
default 属性设置为 true 的按钮(即对话框的默认按钮)将在用户按下 Enter 时自动被按下,
11+
但有一个例外:如果 autoDefault 按钮当前具有焦点,则按下 autoDefault 按钮。
12+
当对话框有 autoDefault 按钮但没有默认按钮时,按 Enter 将按下当前具有焦点的 autoDefault 按钮,或者如果没有按钮具有焦点,
13+
则按下焦点链中的下一个 autoDefault 按钮。
14+
15+
在对话框中,一次只能有一个按钮作为默认按钮。此按钮会显示一个额外边框(取决于 GUI 样式)。
16+
17+
默认按钮行为仅在对话框中提供。当按钮具有焦点时,始终可以通过按空格键从键盘单击按钮。
18+
19+
当对话框可见时,将当前默认按钮的默认属性设置为 False,则在对话框中的按钮下次获得焦点时,将自动分配一个新的默认
20+
21+
该属性的默认值为 False
22+
23+
===================================auto-default属性=============================
24+
此属性用于保持按钮是否为自动默认按钮
25+
26+
如果这个属性被设置为 True,那么这个按钮就是一个自动默认按钮。
27+
28+
在一些 GUI 风格中,默认按钮的周围会有一个额外的框架,最多可达3个像素或更多。Qt会自动在自动默认按钮周围保留这个空间,也就是说,自动默认按钮可能有一个稍大的尺寸提示。
29+
30+
对于有 QDialog 父级的按钮,这个属性的默认值是真,否则默认为假。
31+
32+
关于 default 和 auto-default 如何交互的细节,请参见 default 属性。
33+
34+
===================================代码=============================
35+
.isDefault() -> bool 设置为默认/非默认
36+
.setDefault(bool) 获取默认状态
37+
.setAutoDefault(bool) 设置为自动默认/非自动默认
38+
.autoDefault() -> bool 获取自动默认状态
39+
"""
40+
41+
import sys
42+
43+
from PySide6 import QtWidgets
44+
45+
46+
class MyWidget(QtWidgets.QWidget):
47+
def __init__(self, *args, **kwargs):
48+
super().__init__(*args, **kwargs)
49+
self.setWindowTitle("QPushButton-默认按钮")
50+
self.resize(800, 600)
51+
self.setup_ui()
52+
53+
def setup_ui(self) -> None:
54+
"""设置界面"""
55+
# 创建信息提示框(一种可以包含按钮的对话框)并配置
56+
message_box = QtWidgets.QMessageBox(self)
57+
message_box.setIcon(QtWidgets.QMessageBox.Icon.Warning)
58+
message_box.setWindowTitle("这是一个消息提示框")
59+
message_box.setText("测试默认按钮功能")
60+
self.cancel_btn = message_box.addButton(
61+
QtWidgets.QMessageBox.StandardButton.Cancel
62+
) # 添加标准按钮,返回值为按钮实例
63+
self.ok_btn = message_box.addButton(
64+
QtWidgets.QMessageBox.StandardButton.Ok
65+
) # 添加标准按钮,返回值为按钮实例
66+
# 如果有按钮被按下,则将该按钮的文本打印到终端。
67+
message_box.buttonClicked.connect(lambda btn: print(btn.text())) # type: ignore
68+
69+
# 在主界面上添加一个弹出对话框的按钮,本节功能演示在对话框窗口中而非主窗口中呈现
70+
pop_btn = QtWidgets.QPushButton("弹出对话框", self)
71+
pop_btn.move(200, 200)
72+
pop_btn.clicked.connect(message_box.open) # type: ignore
73+
74+
self.test()
75+
76+
def test(self):
77+
"""测试按钮默认与自动默认功能"""
78+
self.ok_btn.setDefault(True)
79+
self.ok_btn.setAutoDefault(True)
80+
print(f"ok_btn.isDefault({self.ok_btn.isDefault()})")
81+
print(f"cancel_btn.isDefault({self.cancel_btn.isDefault()})")
82+
83+
84+
if __name__ == "__main__":
85+
app = QtWidgets.QApplication(sys.argv)
86+
window = MyWidget()
87+
window.show()
88+
sys.exit(app.exec())

0 commit comments

Comments
 (0)