一、设置QSplitter比例的意义
QSplitter是Qt中常用的一种控件,它能够把窗口或控件分割成两个或多个部分,并且可以通过拖动来随时调整分割部分的大小。比例就是拖拽分割条时两个部分的大小比例。合理的设置QSplitter比例可以让界面更加美观和实用。
二、如何设置QSplitter的比例
QSplitter的比例可以通过splitter的setSizes
函数和widget的setStretchFactor
函数来设置。
# 设置QSplitter的比例
splitter.setSizes([100, 200, 300])
# 设置widget的比例
splitter.setStretchFactor(0, 1)
splitter.setStretchFactor(1, 2)
splitter.setStretchFactor(2, 3)
setSizes()
函数接受一个整数列表,用于指定每个子部分的大小。setStretchFactor()
函数接受两个参数,第一个参数是子部分的索引,第二个参数是该部分的比例因子。比例因子越大,该部分在调整窗口大小时获得的空间就越大。如果全部设置为1,则所有部分在水平或垂直方向上平均分配控件大小。
三、QSplitter比例的实例应用
1、水平分割窗口
以下是一个用于水平分割窗口的简单示例。我们在主窗口中创建了一个QSplitter并添加了两个widget,然后设置了它们的比例,使它们在水平方向上平分窗口大小。
class Example(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QtWidgets.QHBoxLayout(self)
topleft = QtWidgets.QFrame(self)
topleft.setFrameShape(QtWidgets.QFrame.StyledPanel)
topright = QtWidgets.QFrame(self)
topright.setFrameShape(QtWidgets.QFrame.StyledPanel)
splitter1 = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
splitter1.addWidget(topleft)
splitter1.addWidget(topright)
hbox.addWidget(splitter1)
self.setLayout(hbox)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QSplitter')
self.show()
splitter1.setSizes([self.width()/2, self.width()/2])
2、垂直分割窗口并设定大小比例
以下是一个用于垂直分割窗口的简单示例。我们将主窗口分割成三个部分,并通过设置比例来调整每个部分的大小。其中,第一个部分和第三个部分大小相同,都是整个窗口大小的25%。
class Example(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
centralwidget = QtWidgets.QWidget(self)
self.setCentralWidget(centralwidget)
splitter1 = QtWidgets.QSplitter(QtCore.Qt.Vertical)
self.setCentralWidget(splitter1)
topleft = QtWidgets.QFrame(self)
topleft.setFrameShape(QtWidgets.QFrame.StyledPanel)
bottom = QtWidgets.QFrame(self)
bottom.setFrameShape(QtWidgets.QFrame.StyledPanel)
splitter2 = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
splitter2.addWidget(topleft)
splitter2.addWidget(bottom)
right = QtWidgets.QFrame(self)
right.setFrameShape(QtWidgets.QFrame.StyledPanel)
splitter1.addWidget(splitter2)
splitter1.addWidget(right)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QSplitter')
self.show()
splitter1.setSizes([self.height()//4, self.height()//2, self.height()//4])
splitter2.setSizes([self.width()//2, self.width()//2])
3、QSplitter实现布局
在实际应用中,QSplitter还可以用于构建界面布局,以下是一个简单的例子。我们将主窗口分割成两个部分,左侧是QTreeView,右侧是QTextEdit。并且设置拖拽分割条时树形控件占有50%的比例。
class Example(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.tree = QtWidgets.QTreeView(self)
self.tree.setGeometry(QtCore.QRect(10, 50, 180, 200))
self.tree.setHeaderHidden(True)
self.content = QtWidgets.QTextEdit(self)
splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
splitter.addWidget(self.tree)
splitter.addWidget(self.content)
splitter.setStretchFactor(0, 1)
self.setCentralWidget(splitter)
self.setGeometry(300, 300, 480, 320)
self.setWindowTitle('QSplitter')
self.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())