Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách sử dụng QGridLayout trong PyQt
Trong giao diện người dùng với PyQt, việc sắp xếp các thành phần (widget) một cách hợp lý và trực quan là một yếu tố quan trọng để tạo ra các ứng dụng thân thiện với người dùng. Một trong những công cụ mạnh mẽ giúp bạn thực hiện điều này là QGridLayout. Trong bài viết này, bạn sẽ học cách sử dụng QGridLayout để sắp xếp các widget theo các hàng và cột đều nhau, giúp bạn tạo ra các bố cục linh hoạt và dễ quản lý hơn.

Giới thiệu về PyQt QGridLayout
QGridLayout cho phép bạn đặt các widget trong các hàng và cột đều nhau của một lưới. Ví dụ, hình dưới đây minh họa một lưới bao gồm bốn cột và ba hàng:

Các hàng và cột đều được đánh số bắt đầu từ 0. Điều này có nghĩa là hàng đầu tiên có chỉ số là 0, hàng thứ hai có chỉ số là 1, và tiếp tục như vậy. Tương tự, cột đầu tiên có chỉ số là 0, cột thứ hai có chỉ số là 1, v.v.
Giao điểm giữa một hàng và một cột được gọi là ô. Một ô là không gian nơi bạn có thể đặt một widget.
Bài viết này được đăng tại [free tuts .net]
Các hàng và cột có thể mở rộng. Ví dụ, hình dưới đây minh họa rằng cột thứ hai của hàng đầu tiên mở rộng qua hai cột, và hàng thứ hai của cột thứ hai mở rộng qua hai hàng:

Nếu một widget chiếm ít không gian hơn ô chứa nó, bạn có thể căn chỉnh nó trong ô bằng cách sử dụng một trong các tùy chọn căn chỉnh sau:

| Cờ căn chỉnh | Ý nghĩa |
|---|---|
AlignAbsolute |
Nếu hướng là từ trái sang phải, AlignLeft có nghĩa là căn chỉnh với cạnh phải. Tuy nhiên, nếu bạn muốn AlignLeft luôn căn chỉnh với cạnh trái, bạn có thể kết hợp AlignLeft với tùy chọn AlignAbsolute. |
AlignBaseline |
Căn chỉnh widget với đường cơ sở. |
AlignBottom |
Căn chỉnh widget với cạnh dưới. |
AlignCenter |
Căn giữa widget theo cả hai chiều. |
AlignHCenter |
Căn giữa widget theo chiều ngang trong không gian sẵn có. |
AlignHorizontal_Mask |
AlignLeft |
AlignJustify |
Canh đều văn bản trong không gian sẵn có. |
AlignLeft |
Căn chỉnh widget với cạnh trái. |
AlignRight |
Căn chỉnh widget với cạnh phải. |
AlignTop |
Căn chỉnh widget với cạnh trên. |
AlignVCenter |
Căn giữa widget theo chiều dọc trong không gian sẵn có. |
AlignVertical_Mask |
AlignTop |
Sử dụng QGridLayout trong PyQt
Để sử dụng QGridLayout, bạn thực hiện các bước sau:
Tạo một đối tượng QGridLayout:
layout = QGridLayout()
Thiết lập layout cho widget cha:
parent.setLayout(layout)
Đặt các widget con vào layout lưới:
layout.addWidget(widget, row, column, rowSpan, columnSpan, alignment)
Trong đó:
widgetlà widget con mà bạn muốn đặt vào lưới.rowlà chỉ số hàng, bắt đầu từ 0.columnlà chỉ số cột, bắt đầu từ 0.rowSpanlà số hàng mà bạn muốn mở rộng.columnSpanlà số cột mà bạn muốn mở rộng.alignmentchỉ định căn chỉnh của widget trong ô.
Để lấy giá trị căn chỉnh, bạn import Qt từ PyQt6.QtCore:
from PyQt6.QtCore import Qt
và sử dụng một trong các giá trị của enum Qt.AlignmentFlag, ví dụ:
Qt.AlignmentFlag.AlignRight
Ví dụ về PyQt QGridLayout
Ví dụ sau đây minh họa cách tạo một form đăng nhập bằng cách sử dụng QGridLayout:
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QGridLayout
from PyQt6.QtCore import Qt
class MainWindow(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('Login Form')
# Thiết lập layout lưới
layout = QGridLayout()
self.setLayout(layout)
# Username
layout.addWidget(QLabel('Username:'), 0, 0)
layout.addWidget(QLineEdit(), 0, 1)
# Password
layout.addWidget(QLabel('Password:'), 1, 0)
layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)
# Các nút bấm
layout.addWidget(QPushButton('Log in'), 2, 0,
alignment=Qt.AlignmentFlag.AlignRight)
layout.addWidget(QPushButton('Close'), 2, 1,
alignment=Qt.AlignmentFlag.AlignRight)
# Hiển thị cửa sổ
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec())
Output:
Hình ảnh giao diện form đăng nhập với các widget được sắp xếp bằng QGridLayout.

Cách hoạt động:
Tạo một đối tượng QGridLayout:
layout = QGridLayout() self.setLayout(layout)
Đặt một QLabel vào ô (0,0) và QLineEdit vào ô (0,1) để tạo trường nhập Username:
layout.addWidget(QLabel('Username:'), 0, 0)
layout.addWidget(QLineEdit(), 0, 1)
Đặt một QLabel vào ô (1,0) và QLineEdit vào ô (1,1) để tạo trường nhập Password:
layout.addWidget(QLabel('Password:'), 1, 0)
layout.addWidget(QLineEdit(echoMode=QLineEdit.EchoMode.Password), 1, 1)
Đặt nút Log in vào ô (2,0) và căn chỉnh nó với cạnh trái. Đồng thời, đặt nút Close vào ô (2,1) và căn chỉnh nó với cạnh phải:
# Các nút bấm
layout.addWidget(QPushButton('Log in'), 2, 0,
alignment=Qt.AlignmentFlag.AlignRight)
layout.addWidget(QPushButton('Close'), 2, 1,
alignment=Qt.AlignmentFlag.AlignRight)
Kết bài
Với QGridLayout, bạn có thể dễ dàng sắp xếp các widget theo hàng và cột đều nhau, giúp tạo ra các giao diện phức tạp một cách hiệu quả và linh hoạt. Việc hiểu và áp dụng thành thạo QGridLayout sẽ giúp bạn tối ưu hóa bố cục giao diện, mang lại trải nghiệm người dùng tốt hơn và tăng tính thẩm mỹ cho ứng dụng của mình.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng