PyQt6中的QGridLayout是一个网格布局类,它将窗口部件按照网格的方式排列。每个窗口部件占据一个单元格,可以通过设置行和列的跨度来调整窗口部件的大小和位置。
函数原型:
class QGridLayout()
PyQt6中的QGridLayout类提供了以下主要方法:
将窗口部件添加到网格布局中的指定单元格中。参数说明:
设置指定行的跨度,用于控制行之间的拉伸比例。
参数说明:
设置指定列的跨度,用于控制列之间的拉伸比例。
参数说明:
设置水平间距,用于控制单元格之间的水平间距。
参数说明:
设置垂直间距,用于控制单元格之间的垂直间距。参数说明:
设置窗口部件在单元格中的对齐方式。参数说明:
获取指定位置的窗口部件。参数说明:
返回网格布局中窗口部件的数量。
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QGridLayout
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(0, 0, 300, 200)
grid = QGridLayout()
self.setLayout(grid)
label1 = QLabel("Label 1", self)
label2 = QLabel("Label 2", self)
label3 = QLabel("Label 3", self)
label4 = QLabel("Label 4", self)
grid.addWidget(label1, 0, 0)
grid.addWidget(label2, 0, 1)
grid.addWidget(label3, 1, 0)
grid.addWidget(label4, 1, 1)
self.setWindowTitle("QGridLayout Example")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec())
在这个例子中,我们创建了一个MyApp类,继承自QWidget类。在MyApp类的构造函数中,我们创建了一个QGridLayout对象,并将其设置为窗口部件的布局。然后,我们创建了四个QLabel对象,并将它们添加到网格布局中的不同单元格中。最后,我们设置了窗口部件的标题,并显示出来。运行程序后,会看到一个包含四个标签的窗口部件,它们按照网格的方式排列。
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QVBoxLayout, QMainWindow
import sys
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(0, 0, 400, 300)
grid = QGridLayout()
vbox = QVBoxLayout()
label1 = QLabel("Label 1", self)
label2 = QLabel("Label 2", self)
label3 = QLabel("Label 3", self)
label4 = QLabel("Label 4", self)
grid.addWidget(label1, 0, 0, alignment=Qt.AlignmentFlag.AlignRight)
grid.addWidget(label2, 0, 1, alignment=Qt.AlignmentFlag.AlignRight)
grid.addWidget(label3, 1, 0, alignment=Qt.AlignmentFlag.AlignRight)
grid.addWidget(label4, 1, 1, alignment=Qt.AlignmentFlag.AlignRight)
top_widget = QWidget()
top_widget.setLayout(grid)
self.setCentralWidget(top_widget)
self.setWindowTitle("QGridLayout QMainWindow Example")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec())
备注:虽然QMainWindow也继承自QWidget,但是我们不能通过“self.setLayout(grid)”直接给QMainWindow设置布局,这种方式并不能使网格布局生效,而是要通过创建一个QWidget对象,给它设置布局,然后通过“self.setCentralWidget”方法,给QMainWindow设置要居中显示的Widget。?
?
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QVBoxLayout
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(0, 0, 400, 300)
grid = QGridLayout()
vbox = QVBoxLayout()
label1 = QLabel("Label 1", self)
label2 = QLabel("Label 2", self)
label3 = QLabel("Label 3", self)
label4 = QLabel("Label 4", self)
grid.addWidget(label1, 0, 0)
grid.addWidget(label2, 0, 1)
grid.addWidget(label3, 1, 0)
grid.addWidget(label4, 1, 1)
# 设置单元格中的对齐方式为居中对齐
grid.setAlignment(label1, Qt.AlignmentFlag.AlignRight)
grid.setAlignment(label2, Qt.AlignmentFlag.AlignCenter)
grid.setAlignment(label3, Qt.AlignmentFlag.AlignTop)
grid.setAlignment(label4, Qt.AlignmentFlag.AlignBottom)
vbox.addLayout(grid)
self.setLayout(vbox)
self.setWindowTitle("QGridLayout setAlignment Example")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec())
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QVBoxLayout
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
vbox = QVBoxLayout()
label1 = QLabel("Label 1", self)
label2 = QLabel("Label 2", self)
label3 = QLabel("Label 3", self)
label4 = QLabel("Label 4", self)
grid.addWidget(label1, 0, 0)
grid.addWidget(label2, 0, 1)
grid.addWidget(label3, 1, 0)
grid.addWidget(label4, 1, 1)
# 设置水平方向上的间距为100像素
grid.setHorizontalSpacing(100)
# 设置垂直方向上的间距为100像素
grid.setVerticalSpacing(100)
# 设置垂直和水平方向上的间距为100像素
# grid.setSpacing(100)
vbox.addLayout(grid)
self.setLayout(vbox)
self.setWindowTitle("QGridLayout setHorizontalSpacing Example")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec())
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QVBoxLayout
import sys
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
grid = QGridLayout()
vbox = QVBoxLayout()
label1 = QLabel("Label 1", self)
label2 = QLabel("Label 2", self)
label3 = QLabel("Label 3", self)
label4 = QLabel("Label 4", self)
grid.addWidget(label1, 0, 0)
grid.addWidget(label2, 0, 1)
grid.addWidget(label3, 1, 0)
grid.addWidget(label4, 1, 1)
# 设置第一列的拉伸因子为2,第二列的拉伸因子为1
grid.setColumnStretch(0, 2)
grid.setColumnStretch(1, 1)
# 设置第一行的拉伸因子为5,第二行的拉伸因子为3
grid.setRowStretch(0, 5)
grid.setRowStretch(1, 3)
vbox.addLayout(grid)
self.setLayout(vbox)
self.setGeometry(0, 0, 400, 300)
self.setWindowTitle("QGridLayout setColumnStretch Example")
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyApp()
sys.exit(app.exec())