我想把我的窗口分成左框架,中间框架和右框架,但是右框架垂直地分成了右上角和右下角。在我的代码中,输出显示左侧和中心,大小相同,但右侧框架大小为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()
当前输出:
预期输出:
发布于 2018-02-07 19:55:15
一种可能的解决方案是在右侧的拆分器中建立拉伸因子
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_())
https://stackoverflow.com/questions/48671027
复制相似问题