QSplitter設置比例

一、設置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-hant/n/189996.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-29 13:52
下一篇 2024-11-29 13:53

相關推薦

發表回復

登錄後才能評論