在上一篇文章中,我们介绍了Qt for Python中主窗口控件MainWindow()的基本使用。

主窗口控件就像是房屋中的户型和结构,是一个图形界面程序最原始的荒地。在开辟了一个荒地之后,我们继续来了解一下图形界面中的布局。

布局用于规范控件内子控件的排列和摆放顺序,使得图形界面内的控件位置井然有序。

一、Qt For Python的几种常用布局

在图形界面编程中,一般存在以下几种常见的布局方式:

水平布局:布局内的控件沿水平方向排列;

垂直布局:布局内的控件沿垂直方向排列;

网格布局:布局按照行和列进行划分,布局内的控件分列不同的行和列中;

表单布局:布局实现表单显示方式的布局。

下面,我们通过几个示例,来介绍一下在QT for Python中使用一些基础、常见的布局管理。

二、水平布局QHBoxLayout

水平布局,顾名思义,布局内的控件沿水平方向从左往右进行排列。

在Qt For Python中,布局相关的类位于QtWidgets模块中,通过下面的代码,我们可以创建一个内为水平布局的主窗口:

class LayoutApp(QtWidgets.QMainWindow):

'''

州的先生

https://zmister.com

'''

def __init__(self):

super().__init__()

main_widget = QtWidgets.QWidget() # 实例化一个widget控件

main_layout = QtWidgets.QHBoxLayout() # 实例化一个水平布局层

main_widget.setLayout(main_layout) # 设置widget控件布局为水平布局

# 实例化3个按钮

button_1 = QtWidgets.QPushButton('按钮一')

button_2 = QtWidgets.QPushButton('按钮二')

button_3 = QtWidgets.QPushButton('按钮三')

# 将按钮添加到水平布局中

main_layout.addWidget(button_1)

main_layout.addWidget(button_2)

main_layout.addWidget(button_3)

self.setCentralWidget(main_widget) # 设置窗口的中央部件

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = LayoutApp()

gui.show()

sys.exit(app.exec_())

在上面的示例代码中,我们创建了一个继承自主窗口类QMainWindow的对象,然后在其中实例化了一个QWidget和一个水平布局层HBoxLayout,接着创建了3个按钮控件,最后将这3个按钮控件添加到水平布局层中。

运行上述代码,我们将会得到一个如下图所示的图形界面窗口:

三、垂直布局

垂直布局与水平布局,类似,但是控件是沿着垂直方向从上向下进行排列的。

通过下面的代码,我们可以创建一个内为水平布局的主窗口:

from PySide2 import QtWidgets

import sys

class LayoutApp(QtWidgets.QMainWindow):

'''

州的先生

https://zmister.com

'''

def __init__(self):

super().__init__()

main_widget = QtWidgets.QWidget() # 实例化一个widget控件

main_layout = QtWidgets.QVBoxLayout() # 实例化一个垂直布局层

main_widget.setLayout(main_layout) # 设置widget控件布局为水平布局

# 实例化3个按钮

button_1 = QtWidgets.QPushButton('按钮一')

button_2 = QtWidgets.QPushButton('按钮二')

button_3 = QtWidgets.QPushButton('按钮三')

# 将按钮添加到水平布局中

main_layout.addWidget(button_1)

main_layout.addWidget(button_2)

main_layout.addWidget(button_3)

self.setCentralWidget(main_widget) # 设置窗口的中央部件

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = LayoutApp()

gui.show()

sys.exit(app.exec_())

上述代码与水平布局的示例代码类似,只是将QHBoxLayout()换成了QVBoxLayout(),运行上述代码,我们将会得到如下图所示的主窗口图形界面:

四、网格布局

网格布局与水平布局和垂直布局皆不一样,网格布局内部通过一个无形的网格来对其中的控件进行布局。

如同表格一样,网格布局里面分位行和列单元格,同时一个单元格可以占多行或者多列。下面,我们通过一个示例来演示一下:

from PySide2 import QtWidgets

import sys

class LayoutApp(QtWidgets.QMainWindow):

'''

州的先生

https://zmister.com

'''

def __init__(self):

super().__init__()

main_widget = QtWidgets.QWidget() # 实例化一个widget控件

main_layout = QtWidgets.QGridLayout() # 实例化一个垂直布局层

main_widget.setLayout(main_layout) # 设置widget控件布局为水平布局

# 实例化3个按钮

button_1 = QtWidgets.QPushButton('按钮一')

button_2 = QtWidgets.QPushButton('按钮二')

button_3 = QtWidgets.QPushButton('按钮三')

# 将按钮添加到水平布局中

main_layout.addWidget(button_1,1,1,1,2) # 添加到第1行第1列,占1行占2列

main_layout.addWidget(button_2,2,1,1,1) # 添加到第2行第1列,占1行占1列

main_layout.addWidget(button_3,3,2,1,1) # 添加到第3行第2列,占1行占1列

self.setCentralWidget(main_widget) # 设置窗口的中央部件

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = LayoutApp()

gui.show()

sys.exit(app.exec_())

在上面的代码中,我们将按钮添加到网格不同的行列中,运行上述代码,可以得到如下图所示的主窗口图形界面:

五、表单布局

表单布局意即以表单的形式进行布局。那么表单的形式是什么形式呢,我们知道普通的完整表单都会有一个文本标签和一个输入框等,就像下图这样:

那么表单布局也就是按照这种方式进行布局。我们来看具体的例子:

from PySide2 import QtWidgets

import sys

class LayoutApp(QtWidgets.QMainWindow):

'''

州的先生

https://zmister.com

'''

def __init__(self):

super().__init__()

main_widget = QtWidgets.QWidget() # 实例化一个widget控件

main_layout = QtWidgets.QFormLayout() # 实例化一个垂直布局层

main_widget.setLayout(main_layout) # 设置widget控件布局为水平布局

# 实例化3个按钮

button_1 = QtWidgets.QLabel('按钮一')

button_2 = QtWidgets.QPushButton('按钮二')

button_3 = QtWidgets.QPushButton('按钮三')

button_4 = QtWidgets.QPushButton('按钮四')

# 将按钮添加到水平布局中

main_layout.addRow(button_1,button_2)

main_layout.addRow(button_3)

main_layout.addWidget(button_4)

self.setCentralWidget(main_widget) # 设置窗口的中央部件

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = LayoutApp()

gui.show()

sys.exit(app.exec_())

在上面的代码中,我们使用了两个方法三种方式向表单布局层中添加控件,分别是:

addRow(控件一、控件二)

addRow(控件一)

addWidget(控件一)

运行上述代码,我们可以得到如下图所示的主窗口图形界面:

可以看到,带两个参数的addRow()方法,会将第一个参数控件作为表单的标签进行布局,将第一个参数控件作为表单的输入控件进行布局;带一个参数的addRow()方法会将控件直接铺满一行;带一个参数的addWidget()方法则会留空表单标签的位置。

六、最后

以上就是Qt For Python中常见集中布局的使用方法了。虽然还有很多种其他的布局方法,但这4种是最基础最常使用的布局方法,大家可以根据项目的实际需求灵活地使用布局。

分享到:

python pyside简单布局_PySide2/PyQt5的4种基础布局管理相关推荐

  1. Python用户界面编程PyQt5的四种的布局方式

    1.QT是C++编写的跨平台GUI库,GUI是指桌面程序应用. 2.开发基于pyqt5的桌面应用程序必须要使用两个类Qapplication和Qwidget类,都在PyQt5.Qt.widgets里面 ...

  2. 用python自动制作ppt第一讲——了解11种默认布局

    python制作ppt,可以通过编程完成,实现自动办公,高效率完成工作,本讲座一共分为四讲. 1.第一讲--了解11种默认布局 2.第二讲--插入文字的两种方法和追加文字 3.第三讲--插入文本框 4 ...

  3. qt布局嵌套_Qt的5种常用布局搭建

    Qt布局详解: 界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置.那么做出来的界面才看起来美观. 那么如何对界面进行布局呢?Qt提供了一些类负责排列窗体上的控件,主要有 ...

  4. java swing 布局_java swing的四种常用布局

    第三种卡片布局可用于完成简单的抽奖程序,这个还是挺有趣的. 一:流式布局FlowLayout 实现代码: import java.awt.FlowLayout ; import javax.swing ...

  5. python的知识点运用_程序猿在Python编程中不得不使用的十二种基础知识

    Python编程中常用的12种基础知识,其中肯定有你不会的! 人生苦短,我用Python 1.正则表达式替换 目标: 将字符串line中的 overview.gif 替换成其他字符串. 人生苦短,我用 ...

  6. python pyside简单布局_python – pyside显示/隐藏布局

    将布局放入单独的小部件中.现在你"只使用小部件". 这是一个例子: from PySide.QtCore import * from PySide.QtGui import * c ...

  7. python最简单单例模式_Python单例模式的4种实现方法 | 学步园

    Python单例模式的4种实现方法: 方法1: 实现__new__方法,并将一个类的实例绑定到类变量_instance上.如果cls._instace为None,说明该类还未实例化过,实例化该类,并返 ...

  8. python中 12_python编程中常用的12种基础知识总结

    1.正则表达式替换 目标: 将字符串line中的 overview.gif 替换成其他字符串 >>> line =' >>> mo=re.compile(r'(?& ...

  9. Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】

    文章目录 04-头部购物车-商品列表-本地 05-头部购物车-删除操作-本地 06-购物车页面-基础布局 04-头部购物车-商品列表-本地 目的:根据本地存储的商品获取最新的库存价格和有效状态. 大致 ...

最新文章

  1. 【Android 逆向】代码调试器开发 ( ptrace 函数 | 向进程内存写出数据 )
  2. 千兆以太网线和水晶头的制作方法
  3. python re模块详解_python 详解re模块
  4. 根可达算法的根_我的JVM(六):GC的基础概念以及GC算法
  5. android app应用签名生成工具,android应用签名详细步骤
  6. ”扶我起来,我还能学!“ 之ES2021 抢先尝
  7. spring boot 2.0之安全
  8. 乾颐堂军哥HCIE9-解决BGP路由黑洞、聚合的各种参数以及RR基础
  9. linux安装jdk1.8之后报错Error: dl failure on line 893的解决办法
  10. opengl (1) 基本API的熟悉
  11. QEMU,KVM及QEMU-KVM介绍
  12. 改变世界面貌的十个数学公式
  13. 印度软件业为什么?把脉中国软件企业
  14. 载入pytorch的预训练模型时遇到_pickle.UnpicklingError: unpickling stack underflow
  15. NSDTF-DEM格式高程数据转通用的tiff格式高程数据
  16. 如何实现移动端点击下拉箭头显示全部文字
  17. Linux的基础指令
  18. 猜数字小游戏(原创)
  19. 云桌面服务器资源计算机,从“云桌面”认识“云计算”
  20. 安卓学习笔记 1.1 安卓Android Studio应用

热门文章

  1. 【教程】应用侧连接华为云IoT平台
  2. uni-app的由来
  3. php,ajax -->Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
  4. EASYOPS系列|谨慎!勿让持续交付变成bug自动化发布
  5. 【hangs】impdp hangs
  6. 从普通类的角度理解java的enum类型,用自定义类来模拟实现enum类的功能
  7. c# 弹出虚拟键盘关闭虚拟键盘(适用win10、win7)学习记录(转载)
  8. jquery 图片裁剪
  9. 【SQL】获取第二高薪水
  10. python求语音信号短时能量、短时过零率、语谱图