我在QSplitter中设置了项的大小策略,但它似乎没有任何影响。当我在下面的示例中调整窗口大小时,我希望我的左小部件在达到其大小提示(QSizePolicy.Preferred)时停止增长,而右边的小部件则尽可能大(QSizePolicy.Expanding)。
如果我把它们放在一个布局里就行了:
from PyQt5 import QtWidgets, QtCore
app = QtWidgets.QApplication([])
class ColoredBox(QtWidgets.QFrame):
def __init__(self, color):
super().__init__()
self.setStyleSheet(f'background-color: {color}')
def sizeHint(self) -> QtCore.QSize:
return QtCore.QSize(200, 200)
box1 = ColoredBox('red')
box2 = ColoredBox('green')
splitter = QtWidgets.QHBoxLayout()
splitter.setContentsMargins(0, 0, 0, 0)
splitter.setSpacing(0)
splitter.addWidget(box1)
splitter.addWidget(box2)
box1.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
box2.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
container = QtWidgets.QWidget()
container.setLayout(splitter)
container.show()
app.exec_()但是如果我把它们放在一个QSplitter中,拆分器只会将它们之间的间隔均匀地分开,就不起作用了:
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt
app = QtWidgets.QApplication([])
class ColoredBox(QtWidgets.QFrame):
def __init__(self, color):
super().__init__()
self.setStyleSheet(f'background-color: {color}')
def sizeHint(self) -> QtCore.QSize:
return QtCore.QSize(200, 200)
box1 = ColoredBox('red')
box2 = ColoredBox('green')
splitter = QtWidgets.QSplitter(Qt.Horizontal)
splitter.setStretchFactor(0, 0)
splitter.setStretchFactor(1, 1)
splitter.addWidget(box1)
splitter.addWidget(box2)
box1.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
box2.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
container = QtWidgets.QMainWindow()
container.setCentralWidget(splitter)
container.show()
app.exec_()布局与拆分:


发布于 2021-06-17 23:24:27
问题来自这样一个事实,那就是你过早地设定了拉伸因子。
setStretchFactor(),则会忽略它(有关其实现,请参见源代码 );setSizePolicy(horizontalPolicy, verticalPolicy)再次设置时,它们将重置为0默认值(这意味着您可以在QSizePolicy中指定弹力,这与使用setStretchFactor相同)。解决方案很简单:在添加了小部件、setStretchFactor和设置它们的策略之后,移动它们的行。
显然,一个可能的替代方法是设置最大维度(基于QSplitter方向),但这不是完全相同的事情。
如果拆分器中的所有小部件都具有最大大小(包括只存在一个小部件的情况),则结果是拆分器将根据这些小部件具有最大大小,这取决于(或“以上”)其布局中的其他小部件,但是如果拆分器是顶级窗口,那么当它调整到大于其子部件的最大大小时,仍将保留一些空白空间。
https://stackoverflow.com/questions/68025665
复制相似问题