这篇文章主要为大家详细介绍了PyQt5每天必学之布局管理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在GUI编程中有一个不容忽视的部分,那就是布局管理。布局管理掌控着我们的控件在应用程序窗口如何摆放。布局管理可以通过两种方式来完成。我们可以使用绝对定位或布局类两种方法控制程序窗口中的控件位置。

绝对定位

每个控件按程序员指定的位置放置。当您使用绝对定位,我们要了解以下限制:如果我们调整窗口的大小控件的大小和位置保持不变

在不同平台上应用程序看起来可能会不同

更改字体可能会破坏应用程序的布局

如果决定改变布局,我们必须每个控件彻底的加以修改,这是繁琐和耗时的

下面的例子就是控件的绝对坐标定位方式。

#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""

PyQt5 教程

这个例子显示了在窗口中使用绝对定位的三个标签。

作者:我的世界你曾经来过

博客:http://blog.csdn.net/weiaitaowang

最后编辑:2016年7月31日

"""

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QLabel

class Example(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

lbl1 = QLabel('我的世界你曾经来过', self)

lbl1.move(15, 10)

lbl2 = QLabel('CSND博客', self)

lbl2.move(35, 40)

lbl3 = QLabel('程序员', self)

lbl3.move(55, 70)

self.setGeometry(300, 300, 250, 150)

self.setWindowTitle('绝对定位')

self.show()

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_())

在我们的例子中使用的都是标签(Label)。我们通过提供x和y坐标值定位它们。坐标系的原点是控件的左上角。 x值增长是由左到右。 y值增长是从上到下。

lbl1 = QLabel('我的世界你曾经来过', self)

lbl1.move(15, 10)

标签控件被放置在 x=15 和 y=10。

程序执行后

Box layout盒子布局

布局管理使用布局类的方式更加灵活、实用。它是将一个控件放在窗口中的首选方式。QHBoxLayout和QVBoxLayout分别是水平和垂直对齐控件的基本布局类。

试想一下,我们希望把两个按钮在程序的右下角。要创建这样一个布局,我们可以使用一横一纵两个框。要创造必要的空余空间,我们将增加一个拉伸因子(stretch factor)。

#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""

PyQt5 教程

在这个例子中,我们在窗口的右下角放置两个按钮。

作者:我的世界你曾经来过

博客:http://blog.csdn.net/weiaitaowang

最后编辑:2016年7月31日

"""

import sys

from PyQt5.QtWidgets import (QApplication, QWidget,

QPushButton, QVBoxLayout, QHBoxLayout)

class Example(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

okButton = QPushButton('确定')

cancelButton = QPushButton('取消')

hbox = QHBoxLayout()

hbox.addStretch(1)

hbox.addWidget(okButton)

hbox.addWidget(cancelButton)

vbox = QVBoxLayout()

vbox.addStretch(1)

vbox.addLayout(hbox)

self.setLayout(vbox)

self.setGeometry(300, 300, 350, 150)

self.setWindowTitle('Box布局')

self.show()

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_())

该示例将两个按钮放在窗口的右下角。当我们调整应用程序窗口的大小时,他们是固定在右下角的。我们同时使用HBoxLayout 和QVBoxLayout布局。

okButton = QPushButton('确定')

cancelButton = QPushButton('取消')

这里我们创建了两个按钮。

hbox = QHBoxLayout()

hbox.addStretch(1)

hbox.addWidget(okButton)

hbox.addWidget(cancelButton)

我们创建了一个水平box布局,增加拉伸因子(addStretch),添加(addWidget)两个按钮。在添加两个按钮之前增加了一个拉伸因子,这会将两个按钮推到窗口右侧。

vbox = QVBoxLayout()

vbox.addStretch(1)

vbox.addLayout(hbox)

要得到我们想要的布局,还需将横向布局放入垂直的布局中。在垂直框上的拉伸因子会将水平框包括里面的控件推至窗口的底部。

self.setLayout(vbox)

最后,我们设置窗口的主布局。

程序执行后

QGridLayout网格布局

最经常使用的布局类是网格布局。这种布局将该空间分成行和列。要创建一个网格布局,我们使用QGridLayout 的类。

#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""

PyQt5 教程

在这个例子中,我们使用网格布局创建一个计算器的框架。

作者:我的世界你曾经来过

博客:http://blog.csdn.net/weiaitaowang

最后编辑:2016年7月31日

"""

import sys

from PyQt5.QtWidgets import (QApplication, QWidget,

QPushButton, QGridLayout)

class Example(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

grid = QGridLayout()

self.setLayout(grid)

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_())

在我们的例子中,我们将创建的按钮控件放在网格中。

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)]

x我们创建了网格位置的列表。

for position, name in zip(positions, names):

if name == '':

continue

button = QPushButton(name)

grid.addWidget(button, *position)

创建按钮并添加(addWidget)到布局中。

程序执行后

扩展网格布局

窗口中的控件可以跨越网格中的多个列或行。在下面的例子中,我们说明这一点。

#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""

PyQt5 教程

在这个例子中,我们使用GridLayout的跨行创建了一个更复杂的窗口布局。

作者:我的世界你曾经来过

博客:http://blog.csdn.net/weiaitaowang

最后编辑:2016年7月31日

"""

import sys

from PyQt5.QtWidgets import (QApplication, QWidget, QLabel,

QTextEdit, QLineEdit, QGridLayout)

class Example(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

title = QLabel('标题')

author = QLabel('作者')

review = QLabel('评论')

titleEdit = QLineEdit()

authorEdit = QLineEdit()

reviewEdit = QTextEdit()

grid =QGridLayout()

grid.setSpacing(10)

grid.addWidget(title, 1, 0)

grid.addWidget(titleEdit, 1, 1)

grid.addWidget(author, 2, 0)

grid.addWidget(authorEdit, 2, 1)

grid.addWidget(review, 3, 0)

grid.addWidget(reviewEdit, 3, 1, 5, 1)

self.setLayout(grid)

self.setGeometry(300, 300, 350, 300)

self.setWindowTitle('评论')

self.show()

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_())

我们创建的程序中包含三个标签,两个单行文本输入框和一个文本编辑控件,使用QGridLayout布局。

grid =QGridLayout()

grid.setSpacing(10)

实例化网格布局和并设置设置间距。

grid.addWidget(reviewEdit, 3, 1, 5, 1)

添加一个控件到网格布局中,我们可以为这个控件使用行跨度或列跨度。在我们的例子中,我们要求reviewEdit控件跨度5行。

程序执行后

在PyQt5教程的这一部分专门介绍了布局管理。后面将会介绍PyQt5的事件相关内容。

相关推荐:

python布局管理_PyQt5每天必学之布局管理相关推荐

  1. pyqt5切换python版本_PyQt5每天必学之切换按钮_python

    这篇文章主要为大家详细介绍了PyQt5每天必学之切换按钮的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 切换按钮是QPushButton的特殊模式.它是一个具有两种状态的按钮:按压和未按 ...

  2. 0基础怎么学好Python?哪些基础知识必学?

    很多想入门的小伙伴还不知道Python应该怎么学,哪些知识必学,今天我们就来盘点一下. 01.入门方法推荐 总体来讲,找一本靠谱的书,由浅入深,边看边练. 网上的学习教程有很多,多到不知道如何选择.所 ...

  3. python关闭当前窗口_PyQt5每天必学之关闭窗口

    最简单的关闭一个窗口的方法是点击标题栏上的 x 标志.但是,在下面的例子中,我们将展示如何通过编程来控制关闭窗口.我们将使用PyQt5的信号/槽. 以下是我们在例子中使用到的 QPushButton ...

  4. 1元解锁 | Python万能代码模板 |10大必学实用技巧

    内容摘要 你要悄悄学 Python,然后惊艳所有人. 一听到 Python 或编程语言,你可能条件反射会觉得"很难".但今天的 Python 课程是个例外,不需要你懂计算机原理,也 ...

  5. python编程输入_Python编程必学的文件输入,处理和输出,小白也可以学会的教程...

    通过本节的学习,你将了解以下内容: 文件,不管是对计算机科班的,还是打酱油路过的,都不是一个陌生的词汇. 那么,什么是文件呢? 额呃,这个问题,没认真想过,好比我们一直是个人,却没想过怎样才是真真正正 ...

  6. python的基础命令_Python必学之命令行常用的命令

    打开命令行,我们会看到每行前面都有诸如C:\Documents and Settings\Crossin> 或者MyMacBook:~ crossin$ 之类的. 这个提示符表示了当前命令行所在 ...

  7. python学习面向对象_Python小白必学的面向对象

    我们已经知道在Python中"一切皆对象",每个对象都有特定的类型,现在让我们来尝试创建自己的类型--这需要使用class关键字来定义新的"类"(Class), ...

  8. python热身教程_5道趣味Python热身题【新手必学】

    01.将数组中的奇数进行排序 将一个数组里面的奇数的数进行重新排列,0不是奇数 例子:sort_array([5,3,2,8,1,4])==[1,3,2,8,5,4] 1).小白解法: 2).熟手解法 ...

  9. python excel格式刷_cad必学的快捷方式,让你作图飞起

    (一)字母类 1.对象特性 MA:属性匹配 ST:文字样式 COL:设置颜色 LA:图层操作 LT:线形 LTS:线形比例 LW:线宽 UN:图形单位 ATT:属性定义 ATE:编辑属性 BO:边界创 ...

最新文章

  1. 我用1台笔记本模拟黑洞引力波,和超算2个月得出的结果只差1%丨马萨诸塞大学出品...
  2. ETSI GS MEC 011,Edge Platform Application Enablement API
  3. SparkSQL读取hive中的数据,行转列的两种方式【行转列专用函数,UDAF】
  4. java visitor_java11教程--接口FileVisitor用法
  5. 信息安全学习路线图_Python学习图谱:学习到困惑的时候可以参考的图谱
  6. Spring boot 拦截器(HandlerInterceptor) 与 自定义资源映射虚拟路径,WebMvcConfigurer
  7. 主流编程语言的特点以及优缺点(一)
  8. 跟华为云一起,做未来城市的解谜人
  9. 伦敦时间现在几点_英国伦敦时间现在几点钟(英国时差和中国差几个小时)
  10. colorbox 自适应 高度
  11. 分享几款C/C++在线编译器
  12. php导入word文件怎么打开,phpword 导入word
  13. 《和平精英》与玛莎拉蒂跨界合作
  14. 笔记本计算机提升性能,笔记本电脑越来越卡?教你如何有效的提升性能-笔记本电脑卡怎么办...
  15. Elasticsearch java API (11)Search API scrolls
  16. stlink使用笔记
  17. ZUK Z2 Pro(Z2121) 免解锁BL 免rec Magisk Xposed ROOT 救砖 ZUI 4.0.247
  18. 三年MacBook Pro使用经验分享必备的20款mac良心软件
  19. 记一次创维32H3电视安装第三方软件教程
  20. html5专业术语叫啥,HTML5的一些术语和概念

热门文章

  1. java nio 写事件_Java NIO
  2. window.open的用法---javascript学习笔记
  3. NEC中标里斯本智慧城市项目 助力城市整体数字化变革
  4. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环...
  5. 关于大XML文件与大节点处理(System.Xml.XmlTextReader)
  6. 大数据背景下的高职院校信息化建设探索
  7. linux笔记 1-13-软件安装
  8. 日期格式转换 java 2016-09-03T00:00:00.000+08:00
  9. Android GUI之View测量
  10. iOS UITapGestureRecognizer手势和UIButton 以及UITabelView点击事件冲突