Add 03-02-02-04

QPushButton 默认与自动默认
This commit is contained in:
muzing 2023-03-19 16:31:26 +08:00
parent 794796f7b2
commit cebb4c3b4c

View File

@ -0,0 +1,88 @@
"""
QPushButton 默认按钮与自动默认
建议参考https://doc.qt.io/qt-6/qpushbutton.html#default-prop
因为涉及对话框相关内容首次学习时可略过此节待学习对话框章节之后再回顾本节
===================================default属性=============================
默认和自动默认按钮决定当用户在对话框中按下 Enter 时会发生什么
default 属性设置为 true 的按钮即对话框的默认按钮将在用户按下 Enter 时自动被按下
但有一个例外如果 autoDefault 按钮当前具有焦点则按下 autoDefault 按钮
当对话框有 autoDefault 按钮但没有默认按钮时 Enter 将按下当前具有焦点的 autoDefault 按钮或者如果没有按钮具有焦点
则按下焦点链中的下一个 autoDefault 按钮
在对话框中一次只能有一个按钮作为默认按钮此按钮会显示一个额外边框取决于 GUI 样式
默认按钮行为仅在对话框中提供当按钮具有焦点时始终可以通过按空格键从键盘单击按钮
当对话框可见时将当前默认按钮的默认属性设置为 False,则在对话框中的按钮下次获得焦点时将自动分配一个新的默认
该属性的默认值为 False
===================================auto-default属性=============================
此属性用于保持按钮是否为自动默认按钮
如果这个属性被设置为 True那么这个按钮就是一个自动默认按钮
在一些 GUI 风格中默认按钮的周围会有一个额外的框架最多可达3个像素或更多Qt会自动在自动默认按钮周围保留这个空间也就是说自动默认按钮可能有一个稍大的尺寸提示
对于有 QDialog 父级的按钮这个属性的默认值是真否则默认为假
关于 default auto-default 如何交互的细节请参见 default 属性
===================================代码=============================
.isDefault() -> bool 设置为默认/非默认
.setDefault(bool) 获取默认状态
.setAutoDefault(bool) 设置为自动默认/非自动默认
.autoDefault() -> bool 获取自动默认状态
"""
import sys
from PySide6 import QtWidgets
class MyWidget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle("QPushButton-默认按钮")
self.resize(800, 600)
self.setup_ui()
def setup_ui(self) -> None:
"""设置界面"""
# 创建信息提示框(一种可以包含按钮的对话框)并配置
message_box = QtWidgets.QMessageBox(self)
message_box.setIcon(QtWidgets.QMessageBox.Icon.Warning)
message_box.setWindowTitle("这是一个消息提示框")
message_box.setText("测试默认按钮功能")
self.cancel_btn = message_box.addButton(
QtWidgets.QMessageBox.StandardButton.Cancel
) # 添加标准按钮,返回值为按钮实例
self.ok_btn = message_box.addButton(
QtWidgets.QMessageBox.StandardButton.Ok
) # 添加标准按钮,返回值为按钮实例
# 如果有按钮被按下,则将该按钮的文本打印到终端。
message_box.buttonClicked.connect(lambda btn: print(btn.text())) # type: ignore
# 在主界面上添加一个弹出对话框的按钮,本节功能演示在对话框窗口中而非主窗口中呈现
pop_btn = QtWidgets.QPushButton("弹出对话框", self)
pop_btn.move(200, 200)
pop_btn.clicked.connect(message_box.open) # type: ignore
self.test()
def test(self):
"""测试按钮默认与自动默认功能"""
self.ok_btn.setDefault(True)
self.ok_btn.setAutoDefault(True)
print(f"ok_btn.isDefault({self.ok_btn.isDefault()})")
print(f"cancel_btn.isDefault({self.cancel_btn.isDefault()})")
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MyWidget()
window.show()
sys.exit(app.exec())