一、設置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_())
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/189996.html