但是很奇怪的是对splitter1 是有效的,但是对splitter2就没有效果了。 请大牛出手指点一二。
![](zzz/editor/img/code.gif)
import sys
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,
QSplitter, QStyleFactory, QApplication)
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout(self)
topleft = QFrame(self)
topleft.setFrameShape(QFrame.StyledPanel)
topmid = QFrame(self)
topmid.setFrameShape(QFrame.StyledPanel)
topright = QFrame(self)
topright.setFrameShape(QFrame.StyledPanel)
bottom = QFrame(self)
bottom.setFrameShape(QFrame.StyledPanel)
# 通过QSplitter,用户可以拖动子控件边界来调整子控件的尺寸
splitter1 = QSplitter(Qt.Horizontal) # 水平方向宽度的调整
splitter1.addWidget(topleft) # 通过QSplitter需要至少两个控件
splitter1.addWidget(topmid)
splitter1.addWidget(topright)
splitter1.setStretchFactor(0, 4) #第一个参数是子控件的索引号,从0开始,第二个参数为比例。 下同
splitter1.setStretchFactor(1, 3)
splitter1.setStretchFactor(2, 2)
#splitter2 = QSplitter(Qt.Horizontal) #水平的可以一次添加多个控件,无需再次嵌套
#splitter2.addWidget(splitter1)
#splitter2.addWidget(topright)
splitter2 = QSplitter(Qt.Vertical) # 垂直方向宽度的调整
splitter2.addWidget(splitter1) # QSplitter嵌套,后面的splitter的变化会影响前面splitter上所有控件的高度
splitter2.addWidget(bottom)
splitter2.setStretchFactor(0,1)
splitter2.setStretchFactor(1,1)
hbox.addWidget(splitter2) # 由于已经进行了嵌套,所以只需要最后的splitter
self.setLayout(hbox)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QSplitter')
self.show()
def onChanged(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,
QSplitter, QStyleFactory, QApplication)
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout(self)
topleft = QFrame(self)
topleft.setFrameShape(QFrame.StyledPanel)
topmid = QFrame(self)
topmid.setFrameShape(QFrame.StyledPanel)
topright = QFrame(self)
topright.setFrameShape(QFrame.StyledPanel)
bottom = QFrame(self)
bottom.setFrameShape(QFrame.StyledPanel)
# 通过QSplitter,用户可以拖动子控件边界来调整子控件的尺寸
splitter1 = QSplitter(Qt.Horizontal) # 水平方向宽度的调整
splitter1.addWidget(topleft) # 通过QSplitter需要至少两个控件
splitter1.addWidget(topmid)
splitter1.addWidget(topright)
splitter1.setStretchFactor(0, 4) #第一个参数是子控件的索引号,从0开始,第二个参数为比例。 下同
splitter1.setStretchFactor(1, 3)
splitter1.setStretchFactor(2, 2)
#splitter2 = QSplitter(Qt.Horizontal) #水平的可以一次添加多个控件,无需再次嵌套
#splitter2.addWidget(splitter1)
#splitter2.addWidget(topright)
splitter2 = QSplitter(Qt.Vertical) # 垂直方向宽度的调整
splitter2.addWidget(splitter1) # QSplitter嵌套,后面的splitter的变化会影响前面splitter上所有控件的高度
splitter2.addWidget(bottom)
splitter2.setStretchFactor(0,1)
splitter2.setStretchFactor(1,1)
hbox.addWidget(splitter2) # 由于已经进行了嵌套,所以只需要最后的splitter
self.setLayout(hbox)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QSplitter')
self.show()
def onChanged(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())