【问题标题】:PyQt 5: How to maintain relative widget size when expanding a windowPyQt 5:扩展窗口时如何保持相对的小部件大小
【发布时间】:2020-02-28 18:04:03
【问题描述】:

我正在使用 PyQt5 的 Maya 2018 中的自定义 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()

【问题讨论】:

  • 你能发布你的代码吗?
  • 或者你使用 PyQt5 或者你使用 PySide2,因为它们是不同的包。另一方面,它提供了minimal reproducible example
  • 在版本中指出 PySide2 应该使用的问题,因为 Maya 原生使用它,PyQt5 和 PySide2 是不同的,因为最后一个当前有很多可能影响可能解决方案的错误。
  • 您希望小部件的宽度之间的比率为 1 比 2?
  • 不一定是 1 比 2,就在附近的某个地方(我目前正在试验最佳尺寸差异)...我需要计算出确切的数学比率吗?

标签: python pyqt5 maya pyside2


【解决方案1】:

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

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_())

【讨论】:

  • 谢谢!设置拉伸效果很好 - 我只需要使用这些值来获得我喜欢的比例......我还发现如果你正在使用它,你不应该设置最小宽度而让拉伸照顾它。
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2017-04-10
相关资源
最近更新 更多