程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor??

开发过程中遇到调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?的问题如何解决?下面主要结合日常开发的经验,给出你关于调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?的解决方法建议,希望对你解决调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?有所启发或帮助;

我在 QSplitter 中设置了项目的大小策略,但它似乎没有任何影响。当我在下面的示例中调整窗口大小时,我希望我的左侧小部件在达到其大小提示 (QSizePolicy.Preferred) 后停止增长,而右侧小部件尽可能扩大 (QSizePolicy.Expanding)。


如果我把它们放在一个布局中就可以了:

@H_772_8@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)
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 中就不起作用了,splitter 只是均匀地分割它们之间的空间:

@H_772_8@from PyQt5 import QtWidgets,QtCore
from PyQt5.QtCore import Qt

app = QtWidgets.QApplication([])


class coloredBox(QtWidgets.qframE):
    def __init__(self,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.Expanding)

container = QtWidgets.QMainWindow()
container.setCentralWidget(splitter)
container.show()

app.exec_()

布局与拆分器:

调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?

调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?

解决方法

问题在于您过早设置拉伸系数。

  • @H_772_8@setStretchFactor() 如果在尚不存在的小部件索引上完成,则会被忽略(参见 source code 以了解其实现);
  • QSplitter 根据其大小策略调整小部件的比例;尺寸策略还包括 horizontal 和 vertical 拉伸系数,只要再次使用基本 @H_772_8@setSizePolicy(horizontalPolicy,verticalPolicy) 设置,它们就会重置为 0 默认值(这意味着您可以指定拉伸系数在 QSizePolicy 中,这与使用 @H_772_8@setStretchFactor 相同)。

解决方案很简单:在添加小部件设置其政策之后,移动 @H_772_8@setStretchFactor 行

显然,一种可能的替代方法是设置最大尺寸(基于 QSplitter 方向),但这不完全相同。
如果拆分器中的所有小部件都具有最大尺寸(包括仅存在一个小部件的情况),结果是拆分器将具有基于这些小部件的最大尺寸,具体取决于 (或“上方”)它的布局,但如果拆分器是顶级窗口,那么每当它被调整到大于其子窗口[ren]的最大值时,都会有一些空白空间。

大佬总结

以上是大佬教程为你收集整理的调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?全部内容,希望文章能够帮你解决调整 QSplitter 的大小不尊重 QSizePolicy 或 setStretchFactor?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。