如何在 Pyqt 中创建可调整大小的布局 UI?

Posted

技术标签:

【中文标题】如何在 Pyqt 中创建可调整大小的布局 UI?【英文标题】:How to create resizable layout UI in Pyqt? 【发布时间】:2019-11-12 15:55:09 【问题描述】:

我尝试创建一个 gui。窗口应该可以调整大小。当水平调整大小时,其中一些小部件也应该垂直扩展。我对此进行了说明以使其更清楚:

初始

水平调整大小

垂直调整大小

在 Qt 中我使用 QHBoxLayout 但不幸的是没有成功。

谢谢。

【问题讨论】:

显示你的尝试 【参考方案1】:

例如:

您需要在 QSplitter 上使用 setStretchFactor 方法

一个例子(修改自 QSplitter 例子Here):

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):     
        hbox = QtGui.QHBoxLayout(self)
        left = QtGui.QFrame(self)       
        left.setFrameShape(QtGui.QFrame.StyledPanel)
        right = QtGui.QFrame(self)
        right.setFrameShape(QtGui.QFrame.StyledPanel)
        splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
        splitter.addWidget(left)
        splitter.addWidget(right)
        splitter.setStretchFactor(1, 1)
        splitter.setSizes([125, 150])
        hbox.addWidget(splitter)
        self.setLayout(hbox)
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QtGui.QSplitter')
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main() 

这会生成一个如下所示的初始 UI:

当图像水平展开时,您可以看到左侧小部件保持相同大小:

垂直展开时,两个小部件都会展开:

最后,拆分器是可调整大小的:

如果您在调整拆分器后调整窗口大小,则左侧小部件将保持其大小,右侧小部件将展开/折叠以填充窗口的其余部分。

【讨论】:

以上是关于如何在 Pyqt 中创建可调整大小的布局 UI?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中创建可调整大小的图像/矩形 - Objective C

在没有框架的python中创建一个QMainWindow,尽管它是可移动和可调整大小的

PyQt 中的半可调整大小的小部件

如何使用 jQuery UI 获取可拖动和可调整大小元素的坐标

可调整大小的 PyQt 小部件显示具有固定纵横比的图像

有哪些选项可以使用带有可调整大小和可排序元素的 flexbox 进行类似砌体的布局