【发布时间】:2020-10-20 17:55:41
【问题描述】:
我正在尝试制作一个包含许多其他小部件的小部件,但我一直在调整窗口大小时遇到问题:即使我“告诉”它不要这样做,小部件也会继续扩展。这是我的最小示例:
from PyQt5 import QtWidgets, QtGui, QtCore
class CustomWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.layout = QtWidgets.QGridLayout()
self.button1 = QtWidgets.QPushButton("Button A")
self.button2 = QtWidgets.QPushButton("Button B")
self.label1 = QtWidgets.QLabel("Long label that can span multiple columns")
self.layout.addWidget(self.button1, 0, 0)
self.layout.addWidget(self.button2, 0, 1)
self.layout.addWidget(self.label1, 1, 0, 1, 2)
self.setLayout(self.layout)
class App(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.cw = CustomWidget()
self.layout = QtWidgets.QVBoxLayout()
self.layout.addWidget(self.cw)
self.setLayout(self.layout)
self.show()
QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("Fusion"))
app = QtWidgets.QApplication([])
win = App()
status = app.exec_()
此代码确实有效,但是如果我调整窗口大小,那么所有按钮和标签都会散布在屏幕上,这不是我想要的。
我试过了:
-
设置固定大小:不起作用,因为标签文本可以有不同的长度,我希望小部件相应地调整大小(但尽可能小)
-
self.setFixedSize(self.size())不做任何事情,有时会让事情变得更糟 -
self.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)或任何其他尺寸政策似乎无济于事
TL;DR 我希望我的小部件即使有空白空间也可以缩小,但我不想设置固定大小。
编辑:
我已经部分通过将alignment=QtCore.Qt.AlignLeft 传递给所有self.layout.addWidget 调用解决了这个问题。它并不能完全解决问题,但它可能是朝着正确方向迈出的一步。
【问题讨论】:
-
您的问题有点不清楚,尤其是这个:“即使有空白空间,我也希望我的小部件缩小”。你的意思是?您是否尝试设置最大尺寸(或宽度)?
-
@musicamante 我已经尝试设置一个固定/最大尺寸(它们实际上都是一样的)但是 UI 的某些元素可以改变尺寸(即标签文本可能更长),因此我需要动态调整大小。
-
我还是不太明白你想要达到什么目的。你能提供一些预期行为的图片吗?
-
@musicamante 当然,我会制作一张图片并将其上传到 imgur 或其他地方
-
@musicamante imgur.com/a/aNp9aMp