PyQt 5:如何在扩展窗口时保持相对的小部件尺寸

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

[我正在使用Maya 2018在使用PyQt5的自定义ui上进行工作(通过PySide2-有一些最小的差异,但本质上是PyQt5)。

我有一个QHBoxLayout,其中包含两个小部件,并且它们的大小调整策略都设置为“扩展”。我将其中一个的最小宽度设置为另一个宽度的两倍。

[每当我扩展窗口时,较小的窗口小部件都会一直扩展到与较大的窗口大小相同(根本不会改变大小)...并且然后它们都将以相同的速度继续扩展-都占据了一半的窗口。

我希望它们在整个扩展过程中保持相对大小。

有没有办法让我完全忽略呢?

这里有一些简化的代码,我重述了这个问题:

import PySide2.QtWidgets as QtWidgets

class TestDialog(QtWidgets.QDialog):
    def __init__(self, *args, **kwargs):
        QtWidgets.QDialog.__init__(self, *args, **kwargs)

        main_layout = QtWidgets.QHBoxLayout()
        self.setLayout(main_layout)
        main_layout.setContentsMargins(5, 5, 5, 5)
        main_layout.setSpacing(5)

        w1 = QtWidgets.QPushButton('small')
        w2 = QtWidgets.QPushButton('large')
        w1.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        w2.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        w2.setMinimumWidth(250)

        main_layout.addWidget(w1)
        main_layout.addWidget(w2)

        self.setMinimumWidth(450)
        self.setMinimumHeight(100)
        self.resize(450, 100)


test = TestDialog()
test.show()
python pyqt5 maya pyside2
1个回答
0
投票

如果要保持宽度之间的关系,则必须通过添加小部件来设置拉伸:

from PySide2 import QtWidgets


class TestDialog(QtWidgets.QDialog):
    def __init__(self, *args, **kwargs):
        super(TestDialog, self).__init__(*args, **kwargs)

        main_layout = QtWidgets.QHBoxLayout(self)

        main_layout.setContentsMargins(5, 5, 5, 5)
        main_layout.setSpacing(5)

        w1 = QtWidgets.QPushButton("small")
        w2 = QtWidgets.QPushButton("large")
        w1.setSizePolicy(
            QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding
        )
        w2.setSizePolicy(
            QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding
        )

        main_layout.addWidget(w1, stretch=1)
        main_layout.addWidget(w2, stretch=2)

        self.setMinimumSize(450, 100)
        self.resize(450, 100)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    test = TestDialog()
    test.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.