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_())
  • 相关阅读:
    计算机进制转换
    十进制二进制转换
    windows XP 下怎样查看系统运行时间总计?
    “编译器错误信息: CS0016: 未能写入输出文件”解决方法
    用ntsd关进程
    Hosts文件的位置
    开机显示client mac addr...... 错误的解决办法 .
    无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口 .
    【转】XP远程桌面连接2008提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证 .
    关于Access的郁闷二三事。。。
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12928492.html
Copyright © 2011-2022 走看看