在 PyQt6 中将按钮置于标签正下方中心

问题描述 投票:0回答:1

我正在尝试使用 PyQt6 让按钮在标签下方居中。我也希望它在调整窗口大小时起作用。预先感谢您!

layout = QVBoxLayout()

self.welcome_label = QLabel("Welcome to Application!", self)
self.welcome_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.welcome_label.setFont(QFont('Arial', 30))
layout.addWidget(self.welcome_label)

self.start_button = QPushButton('Start')
self.start_button.setFixedSize(QSize(100,30))
layout.addWidget(self.start_button)

self.setLayout(layout)

当前外观和指向我想要按钮所在位置的箭头:

enter image description here

我尝试过添加间隔、删除边距、使用屏幕尺寸信息来更改几何位置,但没有成功。

python pyqt pyqt6
1个回答
0
投票

至少在使用垫片方面您的想法是正确的,您只需要学习如何有效地使用它们即可。

目前您有 1 个布局,包含 2 个部分:

-------------
|           |
|<  label  >|
|           |
-------------
|<button>   |
-------------

我个人发现让小部件做你想做的事情可能很棘手。正如您所发现的,标签可以对齐,但按钮不起作用。

不使用对齐,而是依赖具有拉伸的布局要容易得多。两侧的两个拉伸将使小部件居中。

--------------------
|<-->| widget |<-->|
--------------------

为了防止标签占据太多高度,请在按钮下方添加拉伸以将所有内容向上推。

-----------------
|<label layout >|
-----------------
|<button layout>|
-----------------
|       ^       |
|       v       |

这是结果:

layout = QVBoxLayout()

self.welcome_label = QLabel("Welcome to Application!", self)
self.welcome_label.setFont(QFont('Arial', 30))
welcome_layout = QHBoxLayout()
welcome_layout.addStretch()
welcome_layout.addWidget(self.welcome_label)
welcome_layout.addStretch()
layout.addLayout(welcome_layout)

self.start_button = QPushButton('Start')
self.start_button.setFixedSize(QSize(100,30))
start_layout = QHBoxLayout()
start_layout.addStretch()
start_layout.addWidget(self.start_button)
start_layout.addStretch()
layout.addLayout(start_layout)

layout.addStretch()
self.setLayout(layout)

enter image description here

默认情况下,所有布局都会添加填充,如果您需要从每个小部件周围删除它,则只需使用

child_layout.setContentsMargins(0, 0, 0, 0)

© www.soinside.com 2019 - 2024. All rights reserved.