zoukankan      html  css  js  c++  java
  • 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_())
  • 相关阅读:
    Block详解二(底层分析)
    Block详解一(底层分析)
    Swift 属性与汇编分析inout本质
    Swift --闭包表达式与闭包(汇编分析)
    Swift--struct与class的区别(汇编角度底层分析)
    Swift 枚举-从汇编角度看枚举内存结构
    Swift -POP( 面向协议编程)与OOP(面向对象编程)
    从零开始的计算机网络基础(图文并茂,1.8w字,面试复习必备)
    浅谈js数据类型
    js数组冷知识
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12928492.html
Copyright © 2011-2022 走看看