我正在尝试制作一个包含许多其他小部件的小部件,但我在调整窗口大小方面一直存在问题:即使我“告诉”它不要,小部件也会不断扩展。以下是我的最简单的例子:
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
调用,部分地解决了这个问题。这并不能完全解决问题,但可能是朝着正确方向迈出的一步
如果希望使这些小部件尽可能小,可以向布局中添加行和列拉伸,设置为行/列索引大于使用的最右下角布局坐标
在本例中,您有两行两列,因此足以设置第三行和第三列的拉伸:
显然,您可以将其设置为非常高的索引,这样,如果您必须添加更多的小部件,您就不必关心它
如果要将这些小部件保持在中间,只需从第二行和第二列开始添加它们,并为第一行/第二列设置行/列拉伸:
注意,您也可以使用大小策略,但必须使用
Maximum
,而不是Minimum
,并且还需要添加具有正确对齐方式的小部件我也有同样的问题。我通过将最小和最大大小的值设置为等于100来解决这个问题
如果要缩小小部件,请将“最小值”设置为0,并将“最大值”设置为所需大小,以启动显示。它不会膨胀而是收缩
从您描述的内容来看,您似乎只是不想使用布局
制作一个具有布局的小部件,以容纳按钮和标签。将此小部件放置在主窗口中而不使用布局,而使用setGeometry放置
像这样的,
请注意,在大多数情况下,不建议使用布局,因为这样会使管理窗口更加困难
相关问题 更多 >
编程相关推荐