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如何实现图片隐藏?
    TypeScript数字分隔符和更严格的类属性检查
    JS 原生闭包模块化开发总结
    详解浏览器储存
    对象扩展运算符和 rest 运算符及 keyof 和查找类型
    Js实现动态轮播图效果
    javascript选择器有哪些?
    javascript的事件流模型都有什么?
    理解JavaScript中的语法和代码结构
    14. Cantor表
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12928492.html
Copyright © 2011-2022 走看看