1. 程式人生 > 其它 >10.1 QLayout佈局管理器基類

10.1 QLayout佈局管理器基類

一、QLayout佈局管理器基類

1.基本概念

  • QLayout是佈局管理器基類,屬於抽象類。
  • 如果想使用他,就必須子類化,或者直接使用其子類來呼叫其中的方法和屬性,本節課就利用其子類盒子佈局管理器來講解。
  • 基本步驟
# 1.建立佈局管理器物件
# 2.設定物件引數
# 2.1邊距調節
# 2.2設定佈局的方向
# 3.新增需要佈局的控制元件到佈局管理器
# 4.添加布局管理器到父控制元件

2.程式碼

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


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

    def func_list(self) :
        self.func()

    def func(self) :
        # 初識佈局管理器
        # QLayout是抽象類,直接使用子類建立佈局管理器
        # 因為父控制元件直接和佈局管理器產生聯絡,佈局管理器再和子控制元件建立聯絡,所以這裡子控制元件可以省略self
        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')

        # # 傳統方式佈局
        # label_width = self.width()
        # label_height = self.height() / 3
        # label1.resize(label_width, label_height)
        # label2.resize(label_width, label_height)
        # label3.resize(label_width, label_height)
        #
        # label1.move(0, 0)
        # label2.move(0, label_height)
        # label3.move(0, label_height * 2)

        # 1.建立佈局管理器物件
        # v_layout = QVBoxLayout() # QVBoxLayout 垂直佈局
        v_layout = QHBoxLayout()   #QHBoxLayout 水平佈局

        # 2.設定物件引數
        # 2.1邊距調節
        v_layout.setContentsMargins(10, 30, 50, 70)  # 外邊距 、左上右下
        v_layout.setSpacing(30)  # 內邊距
        # 2.2設定佈局的方向
        # Qt.RightToLeft
        # Qt.LeftToRight
        # Qt.LayoutDirectionAuto  # 自動佈局
        self.setLayoutDirection(Qt.RightToLeft)

        # 3.新增需要佈局的控制元件到佈局管理器
        v_layout.addWidget(label1)
        v_layout.addWidget(label2)
        v_layout.addWidget(label3)

        # 4.添加布局管理器到父控制元件
        self.setLayout(v_layout)  # setLayout直接繼承QWidget,不是控制元件,只是一種定位策略
        print(self.children())  # 這時候佈局管理器和子控制元件擁有相同的父物件self,所以佈局管理器不是控制元件,只是一種定位策略
        # label2.hide()



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

    window.show()
    sys.exit(app.exec_())
## 3.效果 ![](https://img2022.cnblogs.com/blog/2520904/202204/2520904-20220416095333448-414658517.png)