PyQt5布局管理器


布局分類

絕對定位:使用move方法將空間直接定死在某個坐標,不會隨着窗口大小的改變而改變

可變布局:使用各種布局管理器,實現組件的位置和大小隨着窗口的變化而變化

布局管理器

  • QHBoxLayout:水平布局管理器,水平大小自動變化,垂直大小不變

  • QVBoxLayout:垂直布局管理器,水平大小不變,垂直大小自動變化

  • QGridLayout:網格布局管理器,水平和垂直兩個方向自動變化

  • QFormLayout:表單布局管理器,一行由兩列組成,分別是顯示和輸入,水平大小自動變化,垂直大小不變

  • QSplitter:特殊的管理器,實際上是個控件,可以實現里面的子組件邊界拖動功能

接口

方法 描述
addLayout(layout, stretch) 設置窗口的布局管理器,stretch表示伸縮量(默認值0)
addWidget(widget, stretch, aligment) 添加控件到布局管理器中
addSpacing(int) 在控件之間添加間距,間距大小固定,單位是像素
addStretch(stretch) 在布局管理器中添加一個可伸縮的布局管理器
addWidget(widget, x, y) 網管布局管理器方法,在(x,y)處添加控件
addWidget(widget, x, y, row,column, aligment) 網管布局管理器方法,從(x,y)開始row行column列出添加控件(跨格)
addRow(label,edit) 表單布局管理器方法,添加一行

例子

import random
import string
import sys

from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPainter, QFont, QColor, QPen, QBrush
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel, QGridLayout, \
    QFormLayout, QLineEdit, QSplitter


class MyWidget(QWidget):
    def __init__(self):
        super(MyWidget, self).__init__()
        # 水平布局管理
        # hboxlayout = QHBoxLayout()
        # # 設置所有組件間距,單位是像素
        # # hboxlayout.setSpacing(50)
        # hboxlayout.addWidget(QPushButton('1'), 1)
        # # 添加空隙,單位是像素
        # # hboxlayout.addSpacing(50)
        # hboxlayout.addWidget(QPushButton('2'), 1)
        # hboxlayout.addWidget(QPushButton('3'), 1)
        # hboxlayout.addWidget(QPushButton('4'), 2)
        # self.setLayout(hboxlayout)

        # 垂直布局管理
        # vboxlayout = QVBoxLayout()
        # vboxlayout.addWidget(QLabel('1'), 1)
        # # 添加可伸縮的空隙
        # # vboxlayout.addStretch(1)
        # vboxlayout.addWidget(QLabel('2'), 1)
        # vboxlayout.addWidget(QLabel('3'), 1)
        # vboxlayout.addWidget(QLabel('4'), 2)
        # self.setLayout(vboxlayout)

        # 網格布局管理
        # gridLayout = QGridLayout()
        # self.setLayout(gridLayout)
        #
        # gridLayout.addWidget(QPushButton('1'), 0, 0)
        # gridLayout.addWidget(QPushButton('2'), 0, 1)
        # gridLayout.addWidget(QPushButton('3'), 0, 2)
        # gridLayout.addWidget(QPushButton('4'), 1, 0)
        # # gridLayout.addWidget(QPushButton('5'), 1, 1)
        # # gridLayout.addWidget(QPushButton('6'), 1, 2)
        # gridLayout.addWidget(QPushButton('7'), 2, 0)
        # # gridLayout.addWidget(QPushButton('8'), 2, 1)
        # # gridLayout.addWidget(QPushButton('9'), 2, 2)
        #
        # # 一個組件占用多個格子
        # gridLayout.addWidget(QPushButton('A'), 1, 1, 2, 2)

        # 表單布局管理
        # formLayout = QFormLayout()
        # self.setLayout(formLayout)
        #
        # formLayout.addRow(QLabel('用戶名'), QLineEdit())
        # formLayout.addRow(QLabel('密  碼'), QLineEdit())

        # 可拖動布局管理
        hboxlayout = QHBoxLayout()
        self.setLayout(hboxlayout)

        splitter = QSplitter()
        hboxlayout.addWidget(splitter)
        splitter.addWidget(QPushButton('1'))
        splitter.addWidget(QPushButton('2'))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.resize(500, 300)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()
    sys.exit(app.exec_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM