Pyside6-第十三篇-布局(最后一章废话-理论篇)

news2024/9/23 23:34:27

本篇Pyside6的第十三篇,新知识点,布局。

布局的方式有5种。着重挑选几种将

QVBoxLayout(垂直布局):按垂直方向排列小部件。
QHBoxLayout(水平布局):按水平方向排列小部件。
QGridLayout(网格布局):将小部件放置在网格中的行和列位置上。
QFormLayout(表单布局):用于创建标签和输入字段的表单布局。
QStackedLayout(堆叠布局):在同一位置堆叠多个小部件,只显示其中一个小部件。

日常用的最多的也就是QVBoxLayout,QHBoxLayout。


本章没有多的废话,一切看代码走。


QHBoxLayout

from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QApplication, \
    QWidget, QPushButton, QTextEdit

class LayoutQWidget(QWidget):
    def __init__(self):
        super(LayoutQWidget, self).__init__()
        self.setWindowTitle("布局")
        self.setGeometry(300, 300, 600, 500)
        self.UI()

    def UI(self):
        hLayout = QHBoxLayout(self)
        self.btn_login = QPushButton("登录")
        self.btn_register = QPushButton("注册")

        hLayout.addWidget(self.btn_login)  # 添加进入布局
        hLayout.addWidget(self.btn_register)

if __name__ == '__main__':
    app = QApplication([])
    la = LayoutQWidget()
    la.show()
    app.exec()
9fe99442b8033a3dabb549d91f833bee.png

这样就有顺序的直接排布了

QVBoxLayout

from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QApplication, \
    QWidget, QPushButton, QTextEdit, QLabel

class LayoutQWidget(QWidget):
    def __init__(self):
        super(LayoutQWidget, self).__init__()
        self.setWindowTitle("布局")
        self.setGeometry(300, 300, 600, 500)
        self.UI()

    def UI(self):
        vLayout = QVBoxLayout(self)

        self.labelLogin = QLabel("账号")
        self.labelRegister = QLabel("密码")

        vLayout.addWidget(self.labelLogin)
        vLayout.addWidget(self.labelRegister)

if __name__ == '__main__':
    app = QApplication([])
    la = LayoutQWidget()
    la.show()
    app.exec()
3d3c45af2ecec3b8e200da4389fad85a.png

可以看到,垂直布局就这样加入了

但是看着就特别的宽,如何优化?

如何对布局进行限制

结果是告诉你,没有办法直接限制,需要将它放入容器里面,从而限制容器大小,从而限制它。例如QFrame,QWidget。

例如:

from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QApplication, \
    QWidget, QPushButton, QTextEdit, QLabel, QFrame

class LayoutQWidget(QWidget):
    def __init__(self):
        super(LayoutQWidget, self).__init__()
        self.setWindowTitle("布局")
        self.setGeometry(300, 300, 600, 500)
        self.UI()

    def UI(self):
        frame = QFrame(self)
        frame.setGeometry(100, 100, 80, 80)
        vLayout = QVBoxLayout(self)

        self.labelLogin = QLabel("账号")
        self.labelRegister = QLabel("密码")

        vLayout.addWidget(self.labelLogin)
        vLayout.addWidget(self.labelRegister)
        
        frame.setLayout(vLayout)


if __name__ == '__main__':
    app = QApplication([])
    la = LayoutQWidget()
    la.show()
    app.exec()
82efed136f5fd4930d4fe25b66ce6acb.png

这样就限制住了,不过,QFrame这种容器要根据控件的大小灵活调试才行。后面有讲到designer的话,就不需要手写这些东西了。

布局中嵌套布局

from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QApplication, \
    QWidget, QPushButton, QLabel, QFrame, QLineEdit

class LayoutQWidget(QWidget):
    def __init__(self):
        super(LayoutQWidget, self).__init__()
        self.setWindowTitle("布局")
        self.setGeometry(300, 300, 600, 500)
        self.UI()

    def UI(self):
        frame = QFrame(self)

        frame.setGeometry(100, 100, 200, 100)
        inputLayout = QVBoxLayout()
        labelHLayout = QHBoxLayout()
        linehLayout = QHBoxLayout()

        self.labelLogin = QLabel("账号")
        self.lineLogin = QLineEdit("请输入账号")
        self.labelRegister = QLabel("密码")
        self.lineRegister = QLineEdit("请输入密码")

        labelHLayout.addWidget(self.labelRegister)  # 加入布局
        labelHLayout.addWidget(self.lineRegister)   # 加入布局
        linehLayout.addWidget(self.labelLogin)      # 加入布局
        linehLayout.addWidget(self.lineLogin)       # 加入布局

        inputLayout.addLayout(labelHLayout)
        inputLayout.addLayout(linehLayout)

        frame.setLayout(inputLayout)      # 添加布局

if __name__ == '__main__':
    app = QApplication([])
    la = LayoutQWidget()
    la.show()
    app.exec()
2ff6259e49b888e25210353af7d7233c.png

QFrame,是前面提到过的,这里是派上用场了,他与QWidget使用方法差不多。

代码中,通过显示QFrame大小来限制整个文本以及输入框的布局,通过调节QFrame位置来调整整体位置。

整体思路,就是向布局中填入控件,来达到具体的效果。

QGridLayout布局

这个用的比较的少,一起看看如何使用

from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QApplication, \
    QWidget, QPushButton, QLabel, QFrame, QLineEdit, QGridLayout


class LayoutQWidget(QWidget):
    def __init__(self):
        super(LayoutQWidget, self).__init__()
        self.setWindowTitle("布局")
        self.setGeometry(300, 300, 600, 500)
        self.UI()

    def UI(self):
        layout = QGridLayout()

        label1 = QLabel("Label 1")
        label2 = QLabel("Label 2")
        lineEdit1 = QLineEdit()
        lineEdit2 = QLineEdit()
        button = QPushButton("Submit")

        layout.addWidget(label1, 0, 0)  # 添加到第 0 行,第 0 列
        layout.addWidget(lineEdit1, 0, 1)  # 添加到第 0 行,第 1 列
        layout.addWidget(label2, 1, 0)  # 添加到第 1 行,第 0 列
        layout.addWidget(lineEdit2, 1, 1)  # 添加到第 1 行,第 1 列
        layout.addWidget(button, 2, 0, 1, 2)  # 添加到第 2 行,占据 1 行 2 列的区域

        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication([])
    la = LayoutQWidget()
    la.show()
    app.exec()
df9624aaf0d674a0fde8835925749c07.png

QFormLayout布局

这个也不是很常用,了解用法

from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QApplication, \
    QWidget, QPushButton, QLabel, QFrame, QLineEdit, QGridLayout, QFormLayout


class LayoutQWidget(QWidget):
    def __init__(self):
        super(LayoutQWidget, self).__init__()
        self.setWindowTitle("布局")
        self.setGeometry(300, 300, 600, 500)
        self.UI()

    def UI(self):
        layout = QFormLayout()

        label1 = QLabel("Name:")
        lineEdit1 = QLineEdit()
        label2 = QLabel("Email:")
        lineEdit2 = QLineEdit()
        button = QPushButton("Submit")

        layout.addRow(label1, lineEdit1)  # 添加一行,包括标签和文本输入框
        layout.addRow(label2, lineEdit2)
        layout.addRow(button)

        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication([])
    la = LayoutQWidget()
    la.show()
    app.exec()
4f8ff12586cca93e87dd471db70046b5.png

小结

值得注意的是,他们的添加控件方式略有不同。

在Pyqt5中,本章中布局里面的很多东西,都有额外添加。准确的说是Pyside6先对于Pyqt5是取消了很多的东西。以便于更好的使用。


最后,本章代码地址:

https://gitee.com/qinganan_admin/Pyside6_Information/blob/master/%E7%AC%AC%E4%B9%9D%E7%AB%A0%EF%BC%8C%E5%B8%83%E5%B1%80/%E5%B8%83%E5%B1%80.py

自此。废话篇章到此结束了,后面该上干货了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于函数和变量命名

标识符命名基本要求 标识符是指用来识别某个实体的一个符号,在不同的应用环境下有不同的含义。 在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。 C语言…

jdk代理和cglib代理(实例推导)

目录 jdk代理和cglib代理(实例推导)jdk动态代理Cglib动态代理总结 jdk代理和cglib代理(实例推导) 更深层的探究jdk和cglib动态代理的原理 jdk动态代理 jdk动态代理(简单实现) 定义一个House的房源类型接口…

05 2024考研408-计算机组成原理第五章-中央处理器学习笔记

文章目录 前言一、CPU的功能与基本结构1.1、CPU的功能1.2、运算器与控制器需要实现功能1.3、运算器的基本结构1.3.1、基本结构构成(七个部分)1.3.2、各个部件详细介绍①算数逻辑运算单元②通用寄存器组(介绍数据通路的基本结构2个&#xff09…

Python教程(1)——python环境的下载与安装

Python教程(1)——python环境的下载与安装 下面是下载并安装Python解释器的具体步骤,非常详细,保姆级别的教程,初学者一步一步的按照操作。 下载python运行环境 访问官方网站 在浏览器中打开Python的官方网站,网址为 https://…

【PyTest】玩转HTML报告:修改、汉化和优化

前言 Pytest框架可以使用两种测试报告,其中一种就是使用pytest-html插件生成的测试报告,但是报告中有一些信息没有什么用途或者显示的不太好看,还有一些我们想要在报告中展示的信息却没有,最近又有人问我pytest-html生成的报告&a…

vue中由 window.open转为二进制流下载 遇到下载之后无法打开或乱码的坑 (responseType: ‘blob‘ 无效)

我项目中 request.js文件用的是 axios请求的. 如果使用 window.open 下载的话没有太多要求了,但是安全性不行. 如果使用 二进制流的话就需要设置: responseType: blob (设置请求返回类型) function exportData(orgId, personName, gender) {return request({url: /console/e…

时钟、时钟域

1.1 时钟 时钟信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。 脉冲信号之间的时间间隔称为周期:在单位时间内所产生的脉冲个数称为频率,频率的标准计量单位是Hz(赫兹) 每一次时钟脉冲到来,芯…

yolov8-03训练自己的数据集并保存推理结果

目标:将推理结果保存为xyxy形式,并以 pkl 格式保存 主要采取了两种方式,一种是阅读源码,通过CIL的方式保存结果。 一种是在IDE内,通过python代码的形式。 查看推理相关的源码,探索保存结果的相关信息。 在…

PySide6/PyQT 之应用程序最小化到系统托盘

前言 在使用 PySide6/PyQT 时,应用程序默认只会在任务栏展示一个初始图标。很显然,这是不够人性化的。 而在使用微信时候, 按下键盘的Esc,就是隐藏窗口;按下键盘的快捷键 Ctrl Alt W就是显示或隐藏窗口&#xff1…

【Axure高保真原型】多选树穿梭框选择器

今天和大家分享多选树穿梭框的原型模板,左侧多选树选择子级选项后,可以在右侧看到对应的标签,取消选中也会删除对应标签。多选树可以通过选中或取消选中父级自动选中或取消选对应的子级,也可以选中或取消选子级自动反选父级。右侧…

首届“天网杯”网络安全大赛启动 | 赛宁网安提供全面技术支撑

​​6月25日,由中华人民共和国公安部、天津市人民政府指导,天津市公安局、天津市委网信办、天津市工信局、天津市滨海新区人民政府、公安部第一研究所、国家计算机病毒应急处理中心共同主办,南京赛宁信息技术有限公司提供全面技术支撑的首届“…

文件后缀名和MimeType的映射关系

tomcat 的源码里边有。 打开 Tomcat官网 在 Download 菜单下找一个版本&#xff0c;比如 Tomcat 9&#xff0c;点进去&#xff0c;下载源码 找到 conf 目录下的 web.xml 文件 打开&#xff0c;里边有很多 <mime-mapping> 节点就是&#xff0c;总共一千多个吧 粘出来&…

银行卡如何大批量合并转到一个excel表中?并形成结构化数据

将银行卡图片转为Excel后&#xff0c;可以更方便地进行储存、管理和查看&#xff0c;其次也可以快速地进行数据的筛选、统计处理和分析&#xff0c;以提高工作效率&#xff0c;最后&#xff0c;还可以避免手工输入数据时出现的错误&#xff0c;提高数据的准确性。总之&#xff…

FreeRTOS学习笔记—FreeRTOS移植

文章目录 一、FreeRTOS移植1.1 将FreeRTOS的源码添加到工程1.2 修改部分文件1.2.1 修改 SYSTEM 文件1.2.2 修改 usart.c 文件1.2.3 修改 delay.c 文件 二、FreeRTOS移植测试 一、FreeRTOS移植 这里以博主STM32俗称笔记系列的GPIO工程文件为例&#xff0c;学习一下如何进行Free…

c++语言 打字游戏(随机字母)

c语言 打字游戏(随机字母) 程序运行如下 按 enter 回车键 随机字母之后&#xff0c;输入 测出正确率 用时多少秒 测试完按空格键从新开始 退出系统 按 Esc键 #include <stdio.h> #include <time.h> #include <stdlib.h> #include <math.h> #includ…

Bootstrap 排版

文章目录 Bootstrap 排版标题内联子标题 引导主体副本强调缩写地址&#xff08;Address&#xff09; Bootstrap 排版 Bootstrap 使用 Helvetica Neue、 Helvetica、 Arial 和 sans-serif 作为其默认的字体栈。 使用 Bootstrap 的排版特性&#xff0c;您可以创建标题、段落、列…

解决Tomcat控制台窗口输出乱码问题

由于编码的问题&#xff0c;tomcat的控制台窗口输出的都是中文乱码&#xff0c;这明显是编码格式导致的&#xff0c;只要找到对应的编码格式修改一下就好了&#xff0c; 由于我的服务器编码是GBK&#xff0c;所有只需把输出的编码修改为GBK就行了。 936就是GBK编码。找到tomca…

EasyCVR电子地图鼠标悬停展示经纬度的技术实现

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可…

python字典学习

读取和拷贝 if __name__ __main__:print()dictInfo {1: "This is one", 2: "", 3: , 5: "This is five"}# 字典的读取assert (len(dictInfo[1]) > 0)assert (len(dictInfo[2]) < 0)assert (len(dictInfo[3]) < 0)if 4 in dictInfo:a…

昨天去银行转钱,最后怒失300万

**本文首发于公众号【看点代码再上班】&#xff0c;建议关注公众号&#xff0c;及时阅读最新文章。** 原文&#xff1a;昨天去银行转钱&#xff0c;最后怒失300万 大家好&#xff0c;我是Eric&#xff0c;这是我的第24篇原创文章 我的300万"不见"了 小埃年初的时候看…