Python GUI布局方式:

  • 绝对定位布局(move())

  • 水平盒(QHBoxLayout())

  • 垂直盒(QVBoxLayout())

  • 网格布局(QGridLayout())
  • 表单布局(QFormLayout())

一、绝对定位布局

每个控件通过move()设定具体位置

实例:

import sysfrom PyQt5.QtWidgets import QApplication, QWidgetclass Demo(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        label1 = QLabel('demo1',self)        label1.move(10,20)        label2 = QLabel('demo2',self)        label2.move(10,40)        label3 = QLabel('demo3', self)        label3.move(10, 60)        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('绝对定位')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

效果:

二、水平盒布局

1、使控件在GUI界面始终处于(默认)水平居中位置,可设置伸缩量对齐

实例:

from PyQt5.QtWidgets import *import sysclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.layout = QHBoxLayout()        self.label1 = QLabel("demo1")        self.label2 = QLabel("demo2")        self.label3 = QLabel("demo3")        self.label3 = QLabel("demo4")        self.label3 = QLabel("demo5")                #水平控件的默认位置        self.layout.addWidget(self.label1)        self.layout.addWidget(self.label2)        self.layout.addWidget(self.label3)        self.layout.addWidget(self.label4)        self.layout.addWidget(self.label5)                #设置水平盒布局控件的拉伸        self.layout.addWidget(self.label1, 2, Qt.AlignLeft | Qt.AlignTop)        self.layout.addWidget(self.label2, 2, Qt.AlignLeft | Qt.AlignTop)        self.layout.addWidget(self.label3, 1, Qt.AlignLeft | Qt.AlignTop)        self.layout.addWidget(self.label4, 0, Qt.AlignRight | Qt.AlignBottom)        self.layout.addWidget(self.label5, 1, Qt.AlignRight | Qt.AlignBottom)        # 设置水平盒布局的控件间距大小        self.layout.setSpacing(20)        self.setLayout(self.layout)        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('水平盒')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

效果:

三、垂直盒布局

控件垂直布局,并设置按钮一直在右下角

实例:

from PyQt5.QtWidgets import *from  PyQt5.QtCore import *import sysclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        self.resize(400, 300)        self.ok = QPushButton("确定")        self.cancel = QPushButton("取消")        self.h = QHBoxLayout()        self.h.addStretch(1)        self.h.addWidget(self.ok)        self.h.addWidget(self.cancel)        self.v = QVBoxLayout()        self.bt1 = QPushButton("demo1")        self.bt2 = QPushButton("demo2")        self.bt3 = QPushButton("demo3")        self.v.addStretch(0)  # 放在上面        self.v.addWidget(self.bt1)        self.v.addWidget(self.bt2)        self.v.addWidget(self.bt3)        self.v.addStretch(1)  # 始终保持在放在右下角        self.v.addLayout(self.h)        self.setLayout(self.v)        self.setGeometry(300, 300, 250, 150)        self.setWindowTitle('按键窗口')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

效果:

四、网格布局

实例:

from PyQt5.QtWidgets import *from  PyQt5.QtCore import *import sysclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):                        #创建一个网格的按钮        grid = QGridLayout()        self.setLayout(grid)        #QGridLayout的实例被创建并设置应用程序窗口的布局        names = ['Cls', 'Bck', '', 'Close',                 '7', '8', '9', '/',                 '4', '5', '6', '*',                 '1', '2', '3', '-',                 '0', '.', '=', '+']        #按钮的标签        positions = [(i, j) for i in range(5) for j in range(4)]        # 创建一个网格中的位置的列表        for position, name in zip(positions, names):            if name == '':                continue            button = QPushButton(name)            grid.addWidget(button, *position)        self.move(300, 150)        self.setWindowTitle('网格布局')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

效果:

三、表单布局

实例:

from PyQt5.QtWidgets import *from  PyQt5.QtCore import *import sysclass Example(QWidget):    def __init__(self):        super().__init__()        self.initUI()    def initUI(self):        form = QFormLayout()        label1 = QLabel('标题')        label2 = QLabel('内容')        label3 = QLabel('评论')        l1 = QLineEdit()        l2 = QLineEdit()        l3 = QTextEdit()        form.addRow(label1, l1)        form.addRow(label2, l2)        form.addRow(label3, l3)        self.setLayout(form)        self.move(300, 150)        self.setWindowTitle('form')        self.show()if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())

效果:

qt qlabel 布局重叠_Pyqt5布局管理实例相关推荐

  1. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  2. myeclipse窗口布局控件任意_木辛老师的编程课堂:Python和Qt第2讲之布局管理初探(三)...

    在主窗口中放置多个控件,最好的方法是使用布局.控件的布局是学习PyQt路上比较关键也也是比较难理解的部分,赶快跟着木辛老师一起去看看吧. 请点击右上角"关注"按钮关注我们哟:跟着木 ...

  3. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  4. Qt学习(九)—— 布局管理器

    目录 水平/垂直/网格布局 水平布局 垂直布局 网格布局 addWidget() addStretch() 没有布局的界面不仅不美观,窗口中的内容也难以对窗口的大小进行自适应,因此我们还需要学习Qt中 ...

  5. qt布局嵌套_PyQt5 笔记(01):嵌套布局

    PyQt5 有四种布局:水平(QHBoxLayout).竖直(QVBoxLayout).网格(QGridLayout).表单(QFormLayout) 在窗体中单一的布局应该不难,但若是比较复杂的布局 ...

  6. qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示

    ---恢复内容开始--- qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示 打个比方,我现在写个小例子,这个小例子是这样的,整个界面分为俩个部分,分为上半部分和下半部分, ...

  7. cad页面布局快捷键_CAD页面设置管理器快捷键命令(如何设置页面布局)

    页面设置,不仅能够设置打印设备以及其他影响最终输出的外观和格式,还能把设置应用在布局里.那大家知道设置页面布局的方法吗? 接下来,就让小编给大家介绍一下设置页面布局的方法步骤 首先,启动设置页面布局的 ...

  8. 在 Qt 设计器中使用布局

    在可以使用表单之前,需要将表单上的对象放入布局中.这可确保在预览或在应用程序中使用表单时正确显示对象.将对象放置在布局中还可以确保在调整表单大小时正确调整它们的大小. 一旦小部件被插入到布局中,就不可 ...

  9. java gui 案例_JavaGui入门—布局的嵌套使用附实例

    JavaGui布局 常见布局 BorderLayout(边界布局) BorderLayout.EAST BorderLayout.WAST BorderLayout.NORTH BorderLayou ...

最新文章

  1. Spark ListenerBus 和 MetricsSystem 体系分析
  2. CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径
  3. PHP利用CURL_MULTI实现多线程
  4. ping通网关不能上网_手机、电脑为什么连不上网(断网)?
  5. 416B. Art Union
  6. 架构篇:什么是微服务架构 Spring Cloud?
  7. Protel转PADS
  8. css里面li标签怎么加图片_css怎么设置li标签的样式?
  9. 程序员的进化 - 在拉勾1024程序员节上的演讲
  10. 2021年全球与中国颅骨稳定系统行业市场规模及发展前景分析
  11. 果集数据:从化妆镜切入“她”赛道,Amiro如何挖掘科技美护市场新机会?
  12. linux 4.1内核源码编译
  13. MySQL 解压版下载安装
  14. java.lang.UnsupportedOperationException: Currently Flink doesn‘t support individual window table-val
  15. 计算机主机启动 显示器不动什么原因,电脑显示屏不亮但是主机已开机是什么原因?(五种解决方案)...
  16. 正则表达式(手机号前带区号)
  17. .NET MAUI 安卓 UI 资源设置
  18. windows 10关闭IIS服务器
  19. 思科IOS软件命名规则简单介绍:
  20. 霍炬:程序员爱写脚本是种病

热门文章

  1. 部署 Job (第三部分)
  2. 需要在AndroidManifest中添加的条件
  3. mysql 带宽测试工具_MySQL自带的性能压力测试工具mysqlslap详解
  4. CodeForces #549 Div.2 ELynyrd Skynyrd 倍增算法
  5. # 20155337 《Android程序设计》实验四实验报告
  6. StringBuffer与StringBuilder的作用与区别
  7. 2.尽量用const, enum, inline代替#define -- Prefer const, enum, inline to #define.
  8. Oracle在Solaris下的机能与调整简介
  9. 48 - LeetCode 122 121. 买卖股票的最佳时机
  10. 为什么php md5,为什么php md5()总是与python的不同哈希.md5()如果使用汉字?