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

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

本篇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()

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

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

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

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

如何对布局进行限制

结果是告诉你,没有办法直接限制,需要将它放入容器里面,从而限制容器大小,从而限制它。例如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()

这样就限制住了,不过,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()

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

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

小结

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

在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

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


目录
相关文章
|
8月前
|
JavaScript 安全 编译器
QT基础【2-零碎知识】
QT基础【2-零碎知识】
|
8月前
|
前端开发 JavaScript API
如何实现两栏布局?这篇文章告诉你所有的细节!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。
|
3月前
|
前端开发 UED 开发者
探索CSS的奇妙世界:实用技巧与窍门大汇总
在前端开发中,精通CSS是提升用户体验的关键。本文深入探讨了一系列实用的CSS技巧和窍门,帮助开发者在设计和布局中脱颖而出。从响应式文档布局到自定义光标,再到渐变阴影和文本列布局,本文涵盖了多种实用方法,适合新手和经验丰富的开发者。不断学习和运用这些技巧,助力您提升前端开发水平,为用户创造出色的网页体验。探索更多技巧,成就您的CSS大师之路!
56 1
探索CSS的奇妙世界:实用技巧与窍门大汇总
|
6月前
|
JavaScript
小而美的IKUN-UI组件库源码学习(前言)
小而美的IKUN-UI组件库源码学习(前言)
137 0
小而美的IKUN-UI组件库源码学习(前言)
|
8月前
奇淫技巧系列第三篇:阅读源码时基于一组快捷键让我们知道身在何方!
奇淫技巧系列第三篇:阅读源码时基于一组快捷键让我们知道身在何方!
|
8月前
|
前端开发 程序员
前端知识笔记(四十四)———为什么要学代码
前端知识笔记(四十四)———为什么要学代码
69 0
《QT从基础到进阶·二十七》进度条QProgressBar
《QT从基础到进阶·二十七》进度条QProgressBar
204 0
|
前端开发
前端知识案例学习3-毛玻璃效果
前端知识案例学习3-毛玻璃效果
73 0
前端知识案例学习3-毛玻璃效果
|
前端开发
前端知识案例学习4-毛玻璃效果代码实现局部
前端知识案例学习4-毛玻璃效果代码实现局部
96 0
|
机器学习/深度学习 算法 C语言

热门文章

最新文章