PYQT TUTORIAL
Hướng dẫn sử dụng LangChain bằng Python Cách tự viết Context Manager trong Python Cách background của hình ảnh trong Python Cách làm việc với Notion API trong Python Cách đo Time chạy trong Python Cách sao chép danh sách (List) trong Python Cách kiểm tra List trống trong Python Cách sắp xếp dictionary theo giá trị trong Python PyQt là gì? Tạo một chương trình "Hello World". Tín hiệu và Khe (Signals & Slots) trong PyQt Cách sử dụng widget PyQt QLabel Cách sử dụng widget QPushButton của PyQt Cách sử dụng widget QLineEdit trong PyQt Cách sử dụng QVBoxLayout trong PyQt Cách sử dụng QGridLayout trong PyQt Cách sử dụng QFormLayout trong PyQt Cách sử dụng lớp QCheckBox trong PyQt Cách sử dụng lớp PyQt QRadioButton Sử dụng PyQt QComboBox để tạo Widget Combobox Cách sử dụng widget PyQt QSpinBox để tạo một spin box Cách tạo một widget nhập ngày sử dụng lớp PyQt QDateEdit Cách tạo một widget nhập giờ sử dụng lớp PyQt QTimeEdit Cách tạo một widget nhập ngày và giờ sử dụng PyQt QDateTimeEdit Cách sử dụng lớp PyQt QSlider để tạo một widget thanh trượt (slider). Cách dùng PyQt QWidget để làm container chứa các widget khác. Cách dùng lớp PyQt QTabWidget để tạo một widget dạng tab Cách dùng lớp PyQt QGroupBox để tạo một khung nhóm với tiêu đề Cách dùng lớp PyQt QTextEdit để tạo một widget cho phép chỉnh sửa Cách sử dụng lớp PyQt QProgressBar để tạo một widget progress bar Cách sử dụng lớp PyQt QMessageBox để tạo một hộp thoại Cách dùng lớp PyQt QInputDialog để tạo một hộp thoại nhập liệu Cách dùng lớp PyQt QFileDialog để tạo hộp thoại chọn file Cách sử dụng lớp QMainWindow của PyQt để tạo cửa sổ Cách sử dụng lớp PyQt QMenu để tạo menu Cách dùng lớp PyQt QToolBar để tạo các widget toolbar Cách dùng lớp QDockWidget của PyQt để tạo một widget Cách dùng lớp QStatusBar trong PyQt để tạo thanh status bar Cách sử dụng lớp QListWidget trong Python Cách sử dụng lớp QTableWidget để tạo một bảng Cách sử dụng lớp QTreeWidget của PyQt Cách sử dụng Qt Designer để thiết kế UX/UI trong PyQt. Cách sử dụng QThread trong PyQt Cách tạo các lớp QThreadPool đa luồng trong PyQt Cách hoạt động của Model/View trong PyQt Cách sử dụng Qt Style Sheets (QSS) trong PyQt. Chuyển đổi PyQt sang EXE trong PyQt
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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:

Screenshot 202024 08 30 20005749 png

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:

Screenshot 202024 08 30 20005737 png

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:

PyQt Grid AlignmentFlag gif

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 đó:

  • widget là widget con mà bạn muốn đặt vào lưới.
  • row là chỉ số hàng, bắt đầu từ 0.
  • column là chỉ số cột, bắt đầu từ 0.
  • rowSpan là số hàng mà bạn muốn mở rộng.
  • columnSpan là số cột mà bạn muốn mở rộng.
  • alignment chỉ đị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.

PyQt QGridLayout Example png

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ùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top