PyQt5 QGridLayout类

  • Post category:Python

PyQt5 QGridLayout类是一种用于创建网格布局的界面,可在窗口中以行和列方式排列多个组件。以下是PyQt5 QGridLayout类的详细使用攻略及两个示例说明:

创建QGridLayout对象

在PyQt5中,创建QGridLayout对象是非常简单的。在创建一个带有QMainWindow或其他QWidget的窗口应用程序时,QGridLayout通常是应用程序的默认布局管理器。

from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QGridLayout, QWidget

app = QApplication([])
widget = QWidget()
layout = QGridLayout()
widget.setLayout(layout)
widget.show()

添加小部件

要向QGridLayout添加小部件,需要使用addWidget()方法。addWidget()方法接受3个参数 – 要添加的小部件、它占用的行和列、以及行和列的数量。

button1 = QPushButton('Button 1')
layout.addWidget(button1, 0, 0)

button2 = QPushButton('Button 2')
layout.addWidget(button2, 0, 1)

button3 = QPushButton('Button 3')
layout.addWidget(button3, 1, 0, 1, 2)

在此示例中,button1将占用0行0列,button2将占用0行1列,而button3将占用1行0列,同时将跨越1行2列。

控制小部件大小和位置

可以使用setGeometry()方法来设置小部件的大小和位置。

button1.setGeometry(0, 0, 100, 100)
button2.setGeometry(100, 0, 100, 100)
button3.setGeometry(0, 100, 200, 100)

在此示例中,button1将占据左上角100×100的区域,button2将占据100×100的区域,右侧紧贴在button1旁边。button3将占据200×100的区域,下面紧贴在button1和button2下方。

示例说明1:创建简单的网格布局

from PyQt5.QtWidgets import QApplication, QGridLayout, QLabel, QLineEdit, QPushButton, QWidget

app = QApplication([])
window = QWidget()
layout = QGridLayout()

layout.addWidget(QLabel('Name:'), 0, 0)
layout.addWidget(QLineEdit(), 0, 1)
layout.addWidget(QLabel('Password:'), 1, 0)
layout.addWidget(QLineEdit(), 1, 1)
layout.addWidget(QPushButton('Submit'), 2, 0, 1, 2)

window.setLayout(layout)
window.show()
app.exec_()

在此示例中,创建了一个简单的表单。第一行包含标签“Name:”和一个用于输入名称的文本框。第二行包含标签“Password:”和用于输入密码的文本框。最后一行是一个Submit按钮,而它跨越两列。

示例说明2:创建带有网格图像的菜单

from PyQt5.QtWidgets import QApplication, QGridLayout, QLabel, QMainWindow, QWidget
from PyQt5.QtGui import QPixmap

app = QApplication([])
window = QMainWindow()
central_widget = QWidget()
layout = QGridLayout()

layout.addWidget(QLabel('Menu'), 0, 0)
layout.addWidget(QLabel('Item'), 0, 1)
layout.addWidget(QLabel('Price'), 0, 2)

layout.addWidget(QLabel('Pizza'), 1, 0)
layout.addWidget(QLabel('Burger'), 2, 0)
layout.addWidget(QLabel('Fries'), 3, 0)

layout.addWidget(QLabel('12.99'), 1, 2)
layout.addWidget(QLabel('6.99'), 2, 2)
layout.addWidget(QLabel('2.99'), 3, 2)

pixmap = QPixmap('pizza.png')
pixmap = pixmap.scaledToWidth(50)
layout.addWidget(QLabel(pixmap), 1, 1)

pixmap = QPixmap('burger.png')
pixmap = pixmap.scaledToWidth(50)
layout.addWidget(QLabel(pixmap), 2, 1)

pixmap = QPixmap('fries.png')
pixmap = pixmap.scaledToWidth(50)
layout.addWidget(QLabel(pixmap), 3, 1)

central_widget.setLayout(layout)
window.setCentralWidget(central_widget)
window.show()
app.exec_()

在此示例中,创建了一个网格图像菜单。第一行包含标题“Menu”,“Item”,以及“Price”。接下来的三行包含各自的早餐条目,其中每个按钮都具有交替图像。完成菜单之后,通过将布局设置为窗口的中央窗口来设置中心窗口。