PyQt5第二部分-布局类:QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout

  • 0 前言
  • 1 垂直布局QVBoxLayout,水平布局QHBoxLayout
    • 1.1 方法列表
    • 1.2 示例 垂直布局
    • 1.3 示例 布局嵌套
  • 2 网格布局 QGridLayout
    • 2.1 方法列表 QGridLayout
    • 2.2 示例 网格布局
  • 3 表单布局 QFormLayout
    • 2.1 方法列表 QFormLayout
  • 2.2 示例 输入表

0 前言

>>返回Python系列文章目录<<

每个界面窗口只能setLayout只能设置一个布局,但是布局可以addLayout多个布局

布局的继承关系为:

QLayout

  • QBoxLayout
    • QHBoxLayout
    • QVBoxLayou
  • QFormLayout
  • QGridLayout

1 垂直布局QVBoxLayout,水平布局QHBoxLayout

1.1 方法列表

QVBoxLayout类QHBoxLayout类 说明
self=QVBoxLayout()
self=QHBoxLayout()
创建实例
继承自QBoxLayout类的方法
self.addWidget(widget) 将控件放入布局
widget->控件窗口或控件
self.addLayout(layout) 添加子布局
layout->布局类
self.addStretch(n) 添加缩放系数
self.addSpacing(n) 添加距离

1.2 示例 垂直布局

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('垂直布局')
        vlayout = QVBoxLayout()
        self.setLayout(vlayout)

        btn1 = QPushButton('start')
        vlayout.addWidget(btn1)
        btn2 = QPushButton('close')
        vlayout.addWidget(btn2)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

PyQt5第二部分-布局类:QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout_第1张图片

1.3 示例 布局嵌套

import sys
from PyQt5.QtWidgets import *
from PyQt5.Qt import *
from PyQt5.QtGui import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('布局嵌套')

        vlayout1 = QVBoxLayout()
        vlayout2 = QVBoxLayout()
        hlayout = QHBoxLayout()
        hlayout.addLayout(vlayout1)
        hlayout.addLayout(vlayout2)
        self.setLayout(hlayout)

        for idx in range(1, 3):
            btn = QPushButton(str(idx))
            vlayout1.addWidget(btn)
        for idx in range(3, 6):
            btn = QPushButton(str(idx))
            vlayout2.addWidget(btn)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

PyQt5第二部分-布局类:QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout_第2张图片

2 网格布局 QGridLayout

2.1 方法列表 QGridLayout

QGridLayout类 说明
self=QGridLayout() 创建实例
self.addWidget(widget, row, column
rowSpan, columnSpan)
将控件放入布局
widget->控件窗口或控件
row, column->行号和列号,数字
rowSpan, colunmSpan->行跨度和列跨度,向右/向下为正
self.addLayout(layout, row, column
rowSpan, columnSpan)
将子布局放入布局
layout->布局类
row, column->行号和列号,数字
rowSpan, colunmSpan->行跨度和列跨度,向右/向下为正

2.2 示例 网格布局

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('网格布局')
        layout = QGridLayout()
        self.setLayout(layout)

        btn = QPushButton('1-3')
        layout.addWidget(btn, 0, 0, 1, 3) # 行列跨度为负数表示向左合并
        btn = QPushButton('4,7')
        layout.addWidget(btn, 1, 0, 2, 1)

        for x in range(1, 3):
            for y in range(1, 3):
                btn = QPushButton(str(3*x+y))
                layout.addWidget(btn, x, y) # 行列跨度默认为1

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

PyQt5第二部分-布局类:QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout_第3张图片

3 表单布局 QFormLayout

QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表单是提示用户进行交互的一种模式
主要有两列组成,第一列用于显示信息,给用户提示,一般叫做label域
第二列需要用户进行选择或输入,一般叫做field域,field域可以是控件,也可以是布局

2.1 方法列表 QFormLayout

QFormLayout类 说明
self=QFormLayout() 创建布局
self.addRow(label, field) 增加一行表单
label->QLabel类
field->控件类布局类

2.2 示例 输入表

import sys
from PyQt5.QtWidgets import *

class MyWindow(QTabWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('表单布局示例')

        flayout = QFormLayout()
        labl1 = QLabel("标签1")
        lineEdit1 = QLineEdit()
        labl2 = QLabel("标签2")
        lineEdit2 = QLineEdit()
        labl3 = QLabel("标签3")
        lineEdit3 = QLineEdit()

        flayout.addRow(labl1, lineEdit1)
        flayout.addRow(labl2, lineEdit2)
        flayout.addRow(labl3, lineEdit3)

        self.setLayout(flayout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

PyQt5第二部分-布局类:QVBoxLayout, QHBoxLayout, QGridLayout, QFormLayout_第4张图片

>>返回Python系列文章目录<<

你可能感兴趣的:(Python,pyqt,python,gui)