如何在PyQt中创建可调整大小的布局界面?

4
我尝试创建一个GUI界面。窗口应该是可调整大小的。当水平调整大小时,一些小部件应该在垂直方向上扩展。我通过插图来更清晰地说明:

初始状态

水平调整大小

垂直调整大小

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

谢谢。


1
展示你尝试过的内容 - eyllanesc
1个回答

10

例如:

您需要在QSplitter上使用 setStretchFactor 方法。

以下是一个示例(改编自QSplitter示例在这里):

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,看起来像这样:

Initial UI

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

Expanded horizontally

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

enter image description here

最后,分隔条是可调整大小的:

Resizeable

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接