likes
comments
collection
share

PyQt6 中的布局管理(二)前言 在前文我们已经简单探讨过布局管理的相关内容。在此基础上,本文将继续讨论这个话题。

作者站长头像
站长
· 阅读数 57

前言

在前文我们已经简单探讨过布局管理的相关内容。在此基础上,本文将继续讨论这个话题。

网格布局QGridLayout

单一的网络单元格

单一的网络单元格中,将控件放置在特定的行和列中。 案例:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton

class GridLayoutExample(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QGridLayout 示例")

        # 创建 QGridLayout 对象
        layout = QGridLayout()

        # 创建控件
        button1 = QPushButton("按钮 1")
        button2 = QPushButton("按钮 2")
        button3 = QPushButton("按钮 3")
        button4 = QPushButton("按钮 4")

        # 将控件添加到 QGridLayout 中
        layout.addWidget(button1, 0, 0)
        layout.addWidget(button2, 0, 1)
        layout.addWidget(button3, 1, 0)
        layout.addWidget(button4, 1, 1)

        # 设置窗口的布局
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = GridLayoutExample()
    window.show()
    sys.exit(app.exec())

简单介绍一下代码,

  • 创建 QGridLayout 实例:layout = QGridLayout() 创建了一个网格布局对象。

  • 添加控件:

    • layout.addWidget(button1, 0, 0) 将按钮 1 放置在第 0 行第 0 列。
    • layout.addWidget(button2, 0, 1) 将按钮 2 放置在第 0 行第 1 列。
    • layout.addWidget(button3, 1, 0) 将按钮 3 放置在第 1 行第 0 列。
    • layout.addWidget(button4, 1, 1) 将按钮 4 放置在第 1 行第 1 列。

跨越行和列的网格单元格

将控件放置在网格中,并使控件跨越多个行和列。 行跨度:控件在垂直方向上占据多行。 列跨度:控件在水平方向上占据多列。 案例:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton


class GridLayoutExample(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QGridLayout 跨越行和列 示例")

        # 创建 QGridLayout 对象
        layout = QGridLayout()

        # 创建控件
        button1 = QPushButton("按钮 1")
        button2 = QPushButton("按钮 2")
        button3 = QPushButton("按钮 3")
        button4 = QPushButton("按钮 4")
        button5 = QPushButton("按钮 5 (跨越两列)")
        button6 = QPushButton("按钮 6 (跨越两行)")

        # 将控件添加到 QGridLayout 中
        layout.addWidget(button1, 0, 0)  # 第 0 行第 0 列
        layout.addWidget(button2, 0, 1)  # 第 0 行第 1 列
        layout.addWidget(button3, 1, 0)  # 第 1 行第 0 列
        layout.addWidget(button4, 1, 1)  # 第 1 行第 1 列

        # 跨越两列
        layout.addWidget(button5, 2, 0, 1, 2)  # 第 2 行,占用 1 行 2 列
        # 跨越两行
        layout.addWidget(button6, 3, 0, 2, 1)  # 第 3 行,占用 2 行 1 列

        # 设置窗口的布局
        self.setLayout(layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = GridLayoutExample()
    window.show()
    sys.exit(app.exec())

着重说一下这两行代码,其他和单一的网络单元格一样,

  • layout.addWidget(button5, 2, 0, 1, 2) 将按钮 5 放置在第 2 行,占用 1 行和 2 列(即跨越两列)。
  • layout.addWidget(button6, 3, 0, 2, 1) 将按钮 6 放置在第 3 行,占用 2 行和 1 列(即跨越两行)。

表单布局QFormLayout

顾名思义是用于创建表单布局的类,主要适用于输入表单,使得标签与输入控件一一对应,布局整齐。 案例:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QFormLayout, QLabel, QLineEdit, QPushButton

class FormLayoutExample(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QFormLayout 示例")

        # 创建 QFormLayout 对象
        form_layout = QFormLayout()

        # 创建控件
        self.name_input = QLineEdit()
        self.email_input = QLineEdit()
        self.password_input = QLineEdit()
        self.password_input.setEchoMode(QLineEdit.EchoMode.Password)  # 密码输入框隐藏输入字符

        # 添加控件到表单布局
        form_layout.addRow(QLabel("姓名:"), self.name_input)
        form_layout.addRow(QLabel("邮箱:"), self.email_input)
        form_layout.addRow(QLabel("密码:"), self.password_input)

        # 创建提交按钮
        submit_button = QPushButton("提交")
        form_layout.addRow(submit_button)

        # 设置窗口的布局
        self.setLayout(form_layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = FormLayoutExample()
    window.show()
    sys.exit(app.exec())

代码还是简单说一下,

  1. 创建QFormLayout实例
  2. 创建控件: QLineEdit 用于获取用户输入。 setEchoMode(QLineEdit.EchoMode.Password) 用于将密码输入框设置为隐藏输入字符。
  3. 添加控件到布局,使用 addRow 方法将标签和输入控件一一对应添加到布局中。
  4. 添加提交按钮: 将提交按钮添加到表单的最后一行。
  5. 设置窗口的布局: self.setLayout(form_layout)

最后

整体感觉使用起来还是比较简单的,关键在于实际运用中能否充分利用布局功能实现期望的效果。

转载自:https://juejin.cn/post/7418813003783307276
评论
请登录