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大神修炼记(7)——OOP思想(多态)
    Join的表顺序
    java web 基础
    LVS入门
    Eclipse 一直提示 loading descriptor for 的解决方法
    nginx的配置总结
    nginx入门(安装,启动,关闭,信号量控制)
    如何正大光明的使用 google 进行搜索
    npm报错Error: ENOENT, stat 'D:NodeLearn ode-global'
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12928492.html
Copyright © 2011-2022 走看看