PyQt6 中的布局管理(二)前言 在前文我们已经简单探讨过布局管理的相关内容。在此基础上,本文将继续讨论这个话题。
前言
在前文我们已经简单探讨过布局管理的相关内容。在此基础上,本文将继续讨论这个话题。
网格布局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())
代码还是简单说一下,
- 创建QFormLayout实例
- 创建控件: QLineEdit 用于获取用户输入。 setEchoMode(QLineEdit.EchoMode.Password) 用于将密码输入框设置为隐藏输入字符。
- 添加控件到布局,使用 addRow 方法将标签和输入控件一一对应添加到布局中。
- 添加提交按钮: 将提交按钮添加到表单的最后一行。
- 设置窗口的布局:
self.setLayout(form_layout)
最后
整体感觉使用起来还是比较简单的,关键在于实际运用中能否充分利用布局功能实现期望的效果。
转载自:https://juejin.cn/post/7418813003783307276