首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何等分或指定维度的水平布局

如何等分或指定维度的水平布局
EN

Stack Overflow用户
提问于 2018-02-08 02:37:08
回答 1查看 2.5K关注 0票数 1

我想把我的窗口分成左框架,中间框架和右框架,但是右框架垂直地分成了右上角和右下角。在我的代码中,输出显示左侧和中心,大小相同,但右侧框架大小为0,但如果我拖动中间框架窗口,我可以查看右侧框架。

代码语言:javascript
代码运行次数:0
运行
复制
    hbox = QHBoxLayout(self)
    left = QFrame(self)
    left.setFrameShape(QFrame.StyledPanel)
    center = QFrame(self)
    center.setFrameShape(QFrame.StyledPanel)
    top_right = QFrame(self)
    top_right.setFrameShape(QFrame.StyledPanel)
    bottom_right = QFrame(self)
    bottom_right.setFrameShape(QFrame.StyledPanel)

    # add top-right frame and bottom-right frame into a vertical splitter
    splitter2 = QSplitter(Qt.Vertical)
    splitter2.addWidget(top_right)
    splitter2.addWidget(bottom_right)
    # add left, center, vertical splitter into horizontal splitter
    splitter1 = QSplitter(Qt.Horizontal)
    splitter1.addWidget(left)
    splitter1.addWidget(center)
    splitter1.addWidget(splitter2)

    hbox.addWidget(splitter1)
    self.setLayout(hbox)
    QApplication.setStyle(QStyleFactory.create('Cleanlooks'))
    self.setGeometry(500, 500, 750, 750)
    self.center()
    self.setWindowTitle('Example')
    self.show()

当前输出:

预期输出:

EN

回答 1

Stack Overflow用户

发布于 2018-02-08 03:55:15

一种可能的解决方案是在右侧的拆分器中建立拉伸因子

代码语言:javascript
代码运行次数:0
运行
复制
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)

        hbox = QHBoxLayout(self)

        splitter1 = QSplitter(self)
        splitter1.setOrientation(Qt.Horizontal)

        left = QFrame(splitter1)
        left.setFrameShape(QFrame.StyledPanel)

        center = QFrame(splitter1)
        center.setFrameShape(QFrame.StyledPanel)

        splitter2 = QSplitter(splitter1)
        sizePolicy = splitter2.sizePolicy()
        sizePolicy.setHorizontalStretch(1)

        splitter2.setSizePolicy(sizePolicy)
        splitter2.setOrientation(Qt.Vertical)

        top_right = QFrame(splitter2)
        top_right.setFrameShape(QFrame.StyledPanel)
        bottom_right = QFrame(splitter2)
        bottom_right.setFrameShape(QFrame.StyledPanel)

        hbox.addWidget(splitter1)
        self.setGeometry(500, 500, 750, 750)

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyle("fusion")
    w = Widget()
    w.show()
    sys.exit(app.exec_())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48671027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档