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 dùng lớp PyQt QToolBar để tạo các widget toolbar

Trong bài viết này, bạn sẽ học cách sử dụng lớp PyQt QToolBar để tạo các widget thanh công cụ (toolbar) cho ứng dụng của mình. Thanh công cụ là một phần quan trọng trong giao diện người dùng, cho phép người dùng truy cập nhanh vào các chức năng thông qua các biểu tượng hoặc nút. Bằng cách nắm vững cách sử dụng QToolBar, bạn có thể cải thiện trải nghiệm người dùng và tạo ra những ứng dụng chuyên nghiệp 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ề lớp PyQt QToolBar

Một thanh công cụ (toolbar) là một bảng điều khiển có thể di chuyển, chứa các tập hợp nút điều khiển. Để tạo thanh công cụ, bạn sử dụng lớp QToolBar.

Dưới đây là cách tạo một thanh công cụ mới bằng cách sử dụng lớp QToolBar và thêm nó vào cửa sổ chính bằng phương thức addToolBar() của đối tượng QMainWindow:

toolbar = QToolBar('Main ToolBar')
self.addToolBar(toolbar)

Phương thức setIconSize() của đối tượng QToolBar cho phép bạn đặt kích thước của các biểu tượng xuất hiện trên thanh công cụ.

Bài viết này được đăng tại [free tuts .net]

Ví dụ, bạn có thể đặt kích thước của các biểu tượng là (16x16). Để làm điều này, bạn truyền đối tượng QSize vào phương thức setIconSize() như sau:

toolbar.setIconSize(QSize(16, 16))

Thông thường, bạn thêm các nút vào thanh công cụ bằng phương thức addAction():

toolbar.addAction(my_action)

Để tách biệt các nhóm nút trên thanh công cụ, bạn sử dụng phương thức addSeparator():

toolbar.addSeparator()

Ngoài các nút, bạn cũng có thể thêm các widget vào thanh công cụ bằng phương thức addWidget().

Mặc định, một thanh công cụ có thể di chuyển giữa các khu vực thanh công cụ của cửa sổ chính. Để làm cho thanh công cụ cố định ở một khu vực cụ thể, bạn truyền giá trị False vào phương thức setMovable() của đối tượng QToolBar.

Để đặt khu vực cho thanh công cụ, bạn có thể sử dụng phương thức setAllowedArea(). Các khu vực có thể đặt thanh công cụ là phía trên, dưới, trái và phải của cửa sổ.

Sử dụng lớp PyQt QToolBar để tạo thanh công cụ

Chúng ta sẽ tiếp tục chương trình trình soạn thảo văn bản từ bài hướng dẫn QMenu bằng cách tạo một widget thanh công cụ:

PyQt QToolBar png

Dưới đây là chương trình hoàn chỉnh:

import sys
from pathlib import Path
from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit, QFileDialog, QMessageBox, QToolBar
from PyQt6.QtGui import QIcon, QAction
from PyQt6.QtCore import QSize, Qt


class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowIcon(QIcon('./assets/editor.png'))
        self.setGeometry(100, 100, 500, 300)

        self.title = 'Editor'
        self.filters = 'Text Files (*.txt)'

        self.set_title()

        self.path = None

        self.text_edit = QTextEdit(self)
        self.setCentralWidget(self.text_edit)

        menu_bar = self.menuBar()

        file_menu = menu_bar.addMenu('&File')
        edit_menu = menu_bar.addMenu('&Edit')
        help_menu = menu_bar.addMenu('&Help')

        # new menu item
        new_action = QAction(QIcon('./assets/new.png'), '&New', self)
        new_action.setStatusTip('Create a new document')
        new_action.setShortcut('Ctrl+N')
        new_action.triggered.connect(self.new_document)
        file_menu.addAction(new_action)

        # open menu item
        open_action = QAction(QIcon('./assets/open.png'), '&Open...', self)
        open_action.triggered.connect(self.open_document)
        open_action.setStatusTip('Open a document')
        open_action.setShortcut('Ctrl+O')
        file_menu.addAction(open_action)

        # save menu item
        save_action = QAction(QIcon('./assets/save.png'), '&Save', self)
        save_action.setStatusTip('Save the document')
        save_action.setShortcut('Ctrl+S')
        save_action.triggered.connect(self.save_document)
        file_menu.addAction(save_action)

        file_menu.addSeparator()

        # exit menu item
        exit_action = QAction(QIcon('./assets/exit.png'), '&Exit', self)
        exit_action.setStatusTip('Exit')
        exit_action.setShortcut('Alt+F4')
        exit_action.triggered.connect(self.quit)
        file_menu.addAction(exit_action)

        # edit menu
        undo_action = QAction(QIcon('./assets/undo.png'), '&Undo', self)
        undo_action.setStatusTip('Undo')
        undo_action.setShortcut('Ctrl+Z')
        undo_action.triggered.connect(self.text_edit.undo)
        edit_menu.addAction(undo_action)

        redo_action = QAction(QIcon('./assets/redo.png'), '&Redo', self)
        redo_action.setStatusTip('Redo')
        redo_action.setShortcut('Ctrl+Y')
        redo_action.triggered.connect(self.text_edit.redo)
        edit_menu.addAction(redo_action)

        about_action = QAction(QIcon('./assets/about.png'), 'About', self)
        help_menu.addAction(about_action)
        about_action.setStatusTip('About')
        about_action.setShortcut('F1')

        # toolbar
        toolbar = QToolBar('Main ToolBar')
        self.addToolBar(toolbar)
        toolbar.setIconSize(QSize(16, 16))

        toolbar.addAction(new_action)
        toolbar.addAction(save_action)
        toolbar.addAction(open_action)
        toolbar.addSeparator()

        toolbar.addAction(undo_action)
        toolbar.addAction(redo_action)
        toolbar.addSeparator()

        toolbar.addAction(exit_action)

        # status bar
        self.status_bar = self.statusBar()
        self.show()

    def set_title(self, filename=None):
        title = f"{filename if filename else 'Untitled'} - {self.title}"
        self.setWindowTitle(title)

    def confirm_save(self):
        if not self.text_edit.document().isModified():
            return True

        message = f"Do you want to save changes to {self.path if self.path else 'Untitled'}?"
        MsgBoxBtn = QMessageBox.StandardButton
        MsgBoxBtn = MsgBoxBtn.Save | MsgBoxBtn.Discard | MsgBoxBtn.Cancel

        button = QMessageBox.question(
            self, self.title, message, buttons=MsgBoxBtn
        )

        if button == MsgBoxBtn.Cancel:
            return False

        if button == MsgBoxBtn.Save:
            self.save_document()

        return True

    def new_document(self):
        if self.confirm_save():
            self.text_edit.clear()
            self.set_title()

    def save_document(self):
        # save the currently openned file
        if (self.path):
            return self.path.write_text(self.text_edit.toPlainText())

        # save a new file
        filename, _ = QFileDialog.getSaveFileName(
            self, 'Save File', filter=self.filters
        )

        if not filename:
            return

        self.path = Path(filename)
        self.path.write_text(self.text_edit.toPlainText())
        self.set_title(filename)

    def open_document(self):
        filename, _ = QFileDialog.getOpenFileName(self, filter=self.filters)
        if filename:
            self.path = Path(filename)
            self.text_edit.setText(self.path.read_text())
            self.set_title(filename)

    def quit(self):
        if self.confirm_save():
            self.destroy()


if __name__ == '__main__':
    try:
        import ctypes
        myappid = 'mycompany.myproduct.subproduct.version'
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
    finally:
        app = QApplication(sys.argv)
        window = MainWindow()
        sys.exit(app.exec())

Cách hoạt động (tập trung vào phần thanh công cụ)

Trước tiên, tạo đối tượng thanh công cụ mới bằng cách sử dụng lớp QToolBar và thêm nó vào cửa sổ chính bằng phương thức addToolBar().

toolbar = QToolBar('Main ToolBar')
self.addToolBar(toolbar)

Tiếp theo, đặt kích thước biểu tượng trên thanh công cụ thành (16x16):

toolbar.setIconSize(QSize(16, 16))

Sau đó, thêm các hành động new, save, và open vào thanh công cụ. Thêm một dải phân cách bằng phương thức addSeparator():

toolbar.addAction(new_action)
toolbar.addAction(save_action)
toolbar.addAction(open_action)
toolbar.addSeparator()

Tiếp theo, thêm các hành động undoredo vào thanh công cụ và thêm một dải phân cách khác:

toolbar.addAction(undo_action)
toolbar.addAction(redo_action)
toolbar.addSeparator()

Cuối cùng, thêm hành động exit:

toolbar.addAction(exit_action)

Kết bài

Kết thúc bài hướng dẫn này, bạn đã nắm vững cách sử dụng lớp QToolBar để tạo và quản lý thanh công cụ trong ứng dụng PyQt của mình. Bạn đã học cách sử dụng phương thức addToolBar() để thêm thanh công cụ vào cửa sổ chính, giúp tạo ra các thanh công cụ linh hoạt và dễ sử dụng. Bằng cách sử dụng phương thức addAction(), bạn có thể thêm các mục vào thanh công cụ để cung cấp các chức năng cho người dùng. Ngoài ra, phương thức addSeparator() giúp bạn dễ dàng phân cách giữa các nút trên thanh công cụ, tạo sự rõ ràng và tổ chức hơn. Áp dụng những kiến thức này sẽ giúp bạn xây dựng các giao diện người dùng hiệu quả và trực quan hơn cho các ứ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