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_())
  • 相关阅读:
    《JavaScript高级程序设计》笔记:客户端检测(九)
    《JavaScript高级程序设计》笔记:BOM(八)
    《JavaScript高级程序设计》笔记:函数表达式(七)
    《JavaScript高级程序设计》笔记:面向对象的程序设计(六)
    小tips:JS的Truthy和Falsy(真值与假值)
    footer固定在页面底部的实现方法总结
    WEB前端需要了解的XML相关基础知识
    vuex最简单、最直白、最全的入门文档
    原生JS替代jQuery的各种方法汇总
    数据挖掘优秀工具对比
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12928492.html
Copyright © 2011-2022 走看看