|
| 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