1. 程式人生 > 其它 >10.2 QBoxLayout盒子佈局管理器

10.2 QBoxLayout盒子佈局管理器

一、QBoxLayout盒子佈局管理器

1.基本概念

  • QBoxLayout盒子佈局管理器主要分為兩種,一種是橫向佈局(QHBoxLayout),一種是縱向佈局(QVBoxLayout),兩種子類使用發放一直,可以通過子類選擇也可以通過QBoxLayout直接設定選擇哪種佈局方式。

2.程式碼

點選檢視程式碼
from PyQt5.Qt import *
import sys


class Window(QWidget) :
    def __init__(self) :
        super().__init__()
        self.setWindowTitle("佈局管理-盒子佈局QBoxLayout - PyQt5中文網")
        self.resize(600, 500)
        self.func_list()

    def func_list(self) :
        self.func()

    def func(self) :
        # QBoxLayout有兩個子類QVBoxLayout和QHBoxLayout
        label1 = QLabel('標籤1', self)
        label1.setStyleSheet('background-color:green')
        label2 = QLabel('標籤2', self)
        label2.setStyleSheet('background-color:red')
        label3 = QLabel('標籤3', self)
        label3.setStyleSheet('background-color:green')

        # 1.建立佈局管理器
        # QBoxLayout.RightToLeft
        # QBoxLayout.LeftToRight
        # QBoxLayout.TopToBottom
        # QBoxLayout.BottomToTop
        # layout = QBoxLayout(QBoxLayout.RightToLeft)
        layout = QHBoxLayout()

        #2-6 單獨測試 7-9 再進行測試
        # # 2.新增控制元件
        # layout.addWidget(label1)  # 1為1/6
        # layout.addWidget(label2)  # 3為3/6
        # layout.addWidget(label3)  # 2為2/6
        # # 3.添加布局管理器到父控制元件
        # self.setLayout(layout)
        #
        # # 4.修改方向
        # layout.setDirection(QBoxLayout.TopToBottom)
        #
        # # 5.新增元素
        # label4 = QLabel('標籤4', self)
        # label4.setStyleSheet('background-color:green')
        # # layout.addWidget(label4)
        # layout.insertWidget(2, label4)  # 索引值為2的地方插入label4
        #
        # # 6.移除控制元件
        # layout.removeWidget(label4)  # 移除的控制元件只是從佈局管理器中踢出,但是會在父控制元件正常展示,可以直接呼叫hide()方法->三種:刪除、隱藏、放入其他佈局管理器中
        # label4.hide()

        # 7.新增空白
        # 直接在控制元件之間新增,就是在控制元件之間新增一個空白控制元件
        layout.addWidget(label1)
        # layout.addSpacing(50)  # 可以自由調節某個元素之間的間距
        layout.addWidget(label2)
        layout.addWidget(label3)

        # 8.彈簧:當所有控制元件沒有設定伸縮因子的時候就會使用預設值,如果其中一個控制元件伸縮因子改為1,代表這個控制元件佔所有伸縮量的百分之百
        # layout.addWidget(label1, 1)  # 1為1/8
        # layout.addStretch(2)  # 增加2個寬度的伸縮因子
        # layout.addWidget(label2, 3)  # 3為3/8
        # # layout.insertStretch(2)
        # layout.addWidget(label3, 2)  # 2為2/8

        # 9.佈局巢狀
        label4 = QLabel('標籤4')
        label4.setStyleSheet('background-color:green')
        label5 = QLabel('標籤5')
        label5.setStyleSheet('background-color:red')
        label6 = QLabel('標籤6')
        label6.setStyleSheet('background-color:green')

        layout2 = QVBoxLayout() #垂直方向

        layout2.addWidget(label4)
        layout2.addWidget(label5)
        layout2.addWidget(label6)

        layout.addWidget(label1)
        layout.addWidget(label2)
        layout.addLayout(layout2)
        layout.addWidget(label3)

        self.setLayout(layout)


if __name__ == '__main__' :
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())

3.效果