Traffic Count

Phép thuật của PyQt5

Xây dựng giao diện Python đẹp mắt và chuyên nghiệp với PyQt5 và Qt Designer

Python + GUI = Phép màu!

Bạn đang học Python và tự hỏi: "Sao tôi chỉ thấy mấy dòng text chạy trên terminal mà không có cái gì đẹp đẽ hơn?" Hay bạn muốn tạo ra một ứng dụng thực sự - có cửa sổ, có nút bấm, có ô nhập liệu - như những phần mềm chuyên nghiệp mà bạn dùng mỗi ngày?

Đó chính xác là lúc PyQt5 bước vào và thay đổi mọi thứ. Không cần phải biết C++, không cần kinh nghiệm phát triển phần mềm chuyên sâu - chỉ cần Python và PyQt5, bạn có thể tạo ra những ứng dụng GUI (Graphical User Interface - Giao Diện Đồ Họa Người Dùng) đẹp lung linh, chạy trên Windows, Linux, macOS, thậm chí cả Android và iOS!

Bài viết này sẽ đưa bạn qua một hành trình khám phá toàn bộ thế giới PyQt5 - từ cài đặt, thiết kế giao diện bằng công cụ kéo-thả Qt Designer, đến xử lý sự kiện, quản lý layout, các widget phong phú và hàng loạt ứng dụng thực tế hấp dẫn.

1. PyQt5 - Thần dược cho giao diện Python

PyQt5 là một thư viện Python binding của Qt5 - bộ công cụ đồ họa mạnh mẽ bậc nhất thế giới, được phát triển bởi Riverbank Computing. Qt5 ban đầu được viết bằng C++, nhưng nhờ PyQt5, lập trình viên Python có thể khai thác toàn bộ sức mạnh này chỉ bằng ngôn ngữ Python dễ học, dễ đọc.

Điều khiến PyQt5 trở nên "vi diệu" chính là sự kết hợp của: ngôn ngữ Python thanh lịch + bộ framework Qt đồ sộ + công cụ thiết kế trực quan Qt Designer. Đây là bộ ba hoàn hảo để bất kỳ ai cũng có thể tạo ra ứng dụng GUI đẳng cấp.

Tại sao chọn PyQt5 thay vì Tkinter?

Nhiều người học Python bắt đầu với Tkinter - thư viện GUI mặc định đi kèm Python. Tuy nhiên, Tkinter có những hạn chế rõ ràng khi bạn muốn tạo ra giao diện thực sự đẹp và chuyên nghiệp. Hãy xem bảng so sánh sau:

Tiêu chí

PyQt5

Tkinter

Giấy phép

GPL v3 (miễn phí cho mã nguồn mở)

Miễn phí hoàn toàn

Bộ thư viện

Rất đồ sộ & phong phú

Nhỏ gọn hơn

Giao diện widget

Hiện đại, bắt mắt, đẹp mắt

Cổ điển, thiếu thẩm mỹ

Widget nâng cao

Có đầy đủ

Không có

Qt Designer

Có - thiết kế kéo & thả

Không có

Tín hiệu & Slot

Có - cực kỳ linh hoạt

Không có

Đa nền tảng

Windows, Linux, macOS, Android, iOS

Windows, Linux, macOS

 

Những ưu điểm vượt trội của PyQt5

  • Tính linh hoạt cao với cơ chế Signals & Slots - giao tiếp giữa các đối tượng cực kỳ thanh lịch
  • Hơn 200 widget được xây dựng sẵn - từ nút bấm, bảng dữ liệu, cây thư mục đến trình chỉnh sửa văn bản
  • Hỗ trợ đa nền tảng hoàn hảo - một mã nguồn chạy trên Windows, Linux, macOS
  • Qt Designer - công cụ thiết kế giao diện bằng kéo-thả trực quan, không cần viết một dòng code UI nào
  • Hỗ trợ đồ họa 2D/3D, in ấn, mạng, cơ sở dữ liệu - PyQt5 là cả một framework ứng dụng hoàn chỉnh
  • Giao diện widget trông đẹp và hiện đại theo phong cách native của từng hệ điều hành

Cài đặt PyQt5 - Đơn giản chỉ một lệnh

Cài đặt PyQt5 không thể đơn giản hơn. Chỉ cần mở terminal/command prompt và gõ:

pip install pyqt5

Sau khi cài đặt, bạn có thể kiểm tra xác nhận bằng cách mở Python shell và thử import:

from PyQt5 import QtGui

Nếu không có lỗi nào xuất hiện - chúc mừng! PyQt5 đã sẵn sàng phục vụ bạn.


Hình 1.1 - Cài đặt PyQt5 qua pip và kiểm tra xác nhận cài đặt thành công

GUI form đầu tiên - Chỉ 6 dòng code!

Hãy xem điều kỳ diệu này: chỉ với 6 dòng Python, bạn đã có một cửa sổ ứng dụng hoàn chỉnh, có thể kéo, thả, phóng to, thu nhỏ:

 import sys

 from PyQt5.QtWidgets import QWidget, QApplication

 

 myapp = QApplication(sys.argv)

 mywindow = QWidget()

 mywindow.show()

 sys.exit(myapp.exec_())

Chỉ 6 dòng! Đó là sức mạnh của PyQt5. Mỗi dòng đều có vai trò rõ ràng:

  • QApplication: Trái tim của ứng dụng - quản lý toàn bộ vòng đời ứng dụng
  • QWidget: Widget cơ bản nhất - lớp cha của mọi đối tượng UI
  • mywindow.show(): Hiển thị cửa sổ lên màn hình
  • myapp.exec_(): Khởi động vòng lặp sự kiện - lắng nghe và xử lý tương tác người dùng

Qt Designer - Công cụ thiết kế "Thần thánh"

Nếu PyQt5 đã là phép màu, thì Qt Designer chính là cây đũa thần! Qt Designer là một công cụ thiết kế giao diện trực quan - bạn chỉ cần kéo và thả các widget vào canvas, điều chỉnh thuộc tính qua bảng Property Editor, và chỉ trong vài phút bạn đã có một giao diện đẹp mà không cần viết một dòng code UI nào.

Cài đặt Qt Designer cũng rất đơn giản:

pip install pyqt5-tools

Sau đó chạy file designer.exe từ thư mục cài đặt. Giao diện Qt Designer sẽ hiện ra như sau:


Hình 1.2 - Giao diện chính của Qt Designer với đầy đủ các thành phần

6 thành phần chính của Qt Designer

1. Menubar - Thanh menu với các tùy chọn File, Edit, Form View, Settings, Window, Help

2. Toolbar - Thanh công cụ với các biểu tượng cho các thao tác thường dùng nhất

3. Widget Box - Hộp widget bên trái - kho chứa hàng trăm widget để kéo thả vào form

4. Object Inspector - Hiển thị cây phân cấp các đối tượng trong form theo dạng hierarchical

5. Property Editor - Chỉnh sửa mọi thuộc tính của widget: kích thước, màu sắc, font, v.v.

6. Action/Signal-Slot Editor - Kết nối tín hiệu với slot, quản lý actions và resource browser


Hình 1.3 - Các thành phần của Qt Designer được đánh số rõ ràng

Lưu ý: Workflow huyền diệu của Qt Designer: Thiết kế giao diện trong Qt Designer (.ui file) → Chuyển đổi sang Python code bằng lệnh pyuic5 → Tạo file Python riêng import code UI và thêm logic. Cực kỳ sạch sẽ và chuyên nghiệp!

2. Sắp xếp Widget như nhà thiết kế

Tưởng tượng bạn đang trang trí một căn phòng - nếu đặt đồ vật lung tung không theo quy tắc gì, căn phòng sẽ trông hỗn độn. GUI cũng vậy! Layout Management (Quản lý bố cục) là nghệ thuật sắp xếp các widget trong GUI form một cách đẹp mắt, nhất quán và chuyên nghiệp.

PyQt5 cung cấp một hệ thống layout cực kỳ linh hoạt và mạnh mẽ, cho phép bạn tạo ra những giao diện tự động điều chỉnh khi người dùng thay đổi kích thước cửa sổ.

Các loại Layout Manager

QHBoxLayout - Sắp xếp nằm ngang

QHBoxLayout sắp xếp các widget theo hàng ngang từ trái sang phải. Lý tưởng cho thanh công cụ, hàng nút bấm:

from PyQt5.QtWidgets import QHBoxLayout, QPushButton

 hbox = QHBoxLayout()

 hbox.addStretch()     # Khoảng trống co giãn

 hbox.addWidget(QPushButton("OK"))

 hbox.addWidget(QPushButton("Cancel"))

 hbox.addStretch()

QVBoxLayout - Sắp xếp dọc

QVBoxLayout sắp xếp các widget theo cột dọc từ trên xuống dưới. Phù hợp cho form nhập liệu, danh sách menu:

vbox = QVBoxLayout()

 vbox.addWidget(QLabel("Tên đăng nhập:"))

 vbox.addWidget(QLineEdit())

 vbox.addWidget(QLabel("Mật khẩu:"))

 vbox.addWidget(QLineEdit())

QGridLayout - Sắp xếp theo lưới

QGridLayout là layout mạnh mẽ nhất - sắp xếp widget theo hàng và cột như bảng tính. Bạn có thể chỉ định chính xác widget nào ở hàng nào, cột nào:

grid = QGridLayout()

 grid.addWidget(QLabel("Username:"), 0, 0)    # hàng 0, cột 0

 grid.addWidget(QLineEdit(), 0, 1)            # hàng 0, cột 1

 grid.addWidget(QLabel("Password:"), 1, 0)     # hàng 1, cột 0

 grid.addWidget(QLineEdit(), 1, 1)            # hàng 1, cột 1

QFormLayout - Layout dạng form

QFormLayout tạo ra layout 2 cột kiểu form cổ điển - label bên trái, widget nhập liệu bên phải. Cực kỳ phù hợp cho các form đăng nhập, đăng ký, cài đặt:

form = QFormLayout()

 form.addRow("Tên:", QLineEdit())

 form.addRow("Email:", QLineEdit())

 form.addRow("Điện thoại:", QLineEdit())

Hình 2.1 - Ứng dụng User Credentials App với QGridLayout (bên phải) so với absolute positioning (bên trái)

Lưu ý: Absolute Positioning (đặt widget theo tọa độ pixel cứng) tuy đơn giản nhưng không linh hoạt - khi người dùng thay đổi kích thước cửa sổ, layout sẽ bị vỡ. Hãy luôn dùng Layout Managers cho ứng dụng thực tế!

3. Trái tim của GUI

Đây là phần mà PyQt5 thực sự tỏa sáng và khiến nó vượt trội so với mọi thư viện GUI khác. Cơ chế Events, Signals & Slots là kiệt tác kiến trúc phần mềm - thanh lịch, mạnh mẽ và cực kỳ linh hoạt.

Cơ chế hoạt động

Hãy hiểu theo cách đơn giản nhất:

  • Event (Sự kiện): Bất kỳ tương tác nào xảy ra - click chuột, gõ phím, di chuột qua widget
  • Signal (Tín hiệu): Thông báo phát ra từ widget khi có sự kiện - "Này, tôi vừa được click!"
  • Slot (Khe cắm): Hàm/method được gọi để phản hồi tín hiệu - "OK, tôi sẽ xử lý ngay!"

Cú pháp kết nối Signal-Slot trong PyQt5 cực kỳ trực quan:

# Kết nối signal clicked của button với slot xử_lý

 my_button.clicked.connect(xu_ly_click)

 

 def xu_ly_click():

  print("Nút đã được nhấn!")

Ví dụ: Theo dõi sự kiện chuột

Hãy xem một ví dụ hấp dẫn - tạo ứng dụng thay đổi màu button theo từng loại click chuột:

def mousePressEvent(self, e):

 if e.button() == Qt.LeftButton:

 self.left_btn.setStyleSheet("background-color: green")

 if e.button() == Qt.RightButton:

 self.right_btn.setStyleSheet("background-color: red")

 def mouseDoubleClickEvent(self, e):

 if e.button() == Qt.LeftButton:

 self.double_btn.setStyleSheet("background-color: yellow")

Kết nối Signal-Slot trong Qt Designer

Qt Designer có công cụ Edit Signals/Slots cho phép bạn kéo đường nối từ signal của widget này đến slot của widget khác một cách trực quan - không cần viết code! Điều này đặc biệt hữu ích khi tạo các kết nối đơn giản như:

  • Nhấn button "Thoát" → gọi close() của cửa sổ
  • Thay đổi giá trị slider → cập nhật label hiển thị
  • Chọn radio button → thay đổi trạng thái checkbox

Lưu ý: PyQt5 cho phép một signal kết nối với nhiều slot, và một slot được kết nối với nhiều signal. Đây là kiến trúc Observer Pattern hoàn hảo - giúp code luôn sạch, tách biệt và dễ bảo trì.

4. Cánh cửa tương tác

Không có giao diện nào mà không có nút bấm! PyQt5 cung cấp một bộ sưu tập button phong phú, mỗi loại có đặc điểm và mục đích sử dụng riêng.

6 loại Button Widget trong Qt Designer

1. QPushButton - Nút Bấm Cổ Điển

QPushButton là widget được sử dụng nhiều nhất trong mọi ứng dụng. Hình chữ nhật, có thể hiển thị text hoặc icon, kích hoạt hành động khi được nhấn. Dùng cho: OK, Cancel, Submit, Save, v.v.

btn = QPushButton("Click tôi!")

 btn.setIcon(QIcon("save.png"))

 btn.setCheckable(True)   # Toggle button

 btn.clicked.connect(xu_ly)

2. QToolButton - Nút công cụ

QToolButton thường xuất hiện trong toolbar - nhỏ gọn, biểu tượng rõ ràng. Hỗ trợ popup menu khi giữ nút, lý tưởng cho các tính năng có menu con (Cut, Copy, Paste...)

3. QRadioButton - Nút chọn một

QRadioButton cho phép người dùng chọn một trong nhiều tùy chọn. Khi chọn một radio button trong nhóm, các radio button khác tự động bỏ chọn. Dùng cho: chọn giới tính, chọn cỡ áo, v.v.

rb_male = QRadioButton("Nam")

 rb_female = QRadioButton("Nữ")

 rb_male.toggled.connect(lambda: print("Đã chọn Nam"))

4. QCheckBox - Hộp chọn nhiều

QCheckBox cho phép người dùng chọn hoặc bỏ chọn độc lập - không ảnh hưởng đến checkbox khác. Dùng cho: chọn nhiều tính năng, chấp nhận điều khoản, v.v.

cb_agree = QCheckBox("Tôi đồng ý với Điều Khoản Sử Dụng")

 cb_agree.stateChanged.connect(kiem_tra_dong_y)

5. QCommandLinkButton - Nút lệnh

QCommandLinkButton là nút bấm đặc biệt với mô tả chi tiết bên dưới tên - trông như hyperlink. Thường dùng trong wizard/setup dialog để hướng dẫn người dùng thực hiện hành động cụ thể.

6. QDialogButtonBox - Hộp nút chuẩn

QDialogButtonBox cung cấp bộ nút chuẩn (OK/Cancel, Yes/No/Cancel, Save/Discard...) theo quy ước của từng nền tảng. Tự động sắp xếp thứ tự nút theo chuẩn Windows, macOS hoặc Linux.

5. Hiển thị dữ liệu phong phú

Khi ứng dụng cần hiển thị và quản lý tập dữ liệu lớn - danh sách sản phẩm, cây thư mục, bảng dữ liệu - PyQt5 cung cấp hai nhóm widget mạnh mẽ: Item Views (Model-Based) và Item Widgets (Item-Based).

Item views - Kiến trúc Model/View

PyQt5 áp dụng kiến trúc thiết kế Model-View-Controller (MVC) qua cơ chế Model/View:

  • Model: Lớp dữ liệu - nơi lưu trữ và truy cập dữ liệu
  • View: Lớp hiển thị - cách dữ liệu được trình bày cho người dùng
  • Delegate: Lớp xử lý - kiểm soát cách người dùng chỉnh sửa dữ liệu

QListView - Danh sách biểu tượng/Text

QListView hiển thị dữ liệu dạng danh sách không phân cấp. Hỗ trợ hai chế độ: ListMode (danh sách text) và IconMode (lưới biểu tượng - như File Explorer của Windows). Lý tưởng cho danh sách sản phẩm, danh bạ, playlist nhạc.

QTreeView - Cây phân cấp

QTreeView hiển thị dữ liệu dạng cây phân cấp - có thể mở rộng/thu gọn các nhánh con. Giống như cây thư mục trong File Explorer. Lý tưởng cho: quản lý file, menu phân cấp, cấu trúc XML/JSON.

QTableView - Bảng dữ liệu

QTableView hiển thị dữ liệu dạng bảng hàng/cột như Excel. Cực kỳ phù hợp cho ứng dụng quản lý dữ liệu, báo cáo, bảng tính. Kết hợp với QStandardItemModel để tạo bảng dữ liệu động:

model = QStandardItemModel(4, 3)      # 4 hàng, 3 cột

 model.setHorizontalHeaderLabels(["Tên", "Tuổi", "Email"])

 table_view.setModel(model)

Item Widgets - Đơn giản và trực tiếp

  • QListWidget: Danh sách đơn giản với items quản lý trực tiếp
  • QTreeWidget: Cây phân cấp với QTreeWidgetItem
  • QTableWidget: Bảng với QTableWidgetItem - dữ liệu được nhúng trực tiếp vào widget

# Ví dụ QTableWidget

 table = QTableWidget(5, 3)

 table.setHorizontalHeaderLabels(["STT", "Tên sản phẩm", "Giá"])

 table.setItem(0, 0, QTableWidgetItem("1"))

 table.setItem(0, 1, QTableWidgetItem("Laptop Asus"))

 table.setItem(0, 2, QTableWidgetItem("15,000,000 VNĐ"))

6. Tổ chức giao diện như kiến trúc sư

Container Widgets là các widget đặc biệt chứa và tổ chức các widget con bên trong chúng. Họ là những "ngôi nhà" giúp gom nhóm các widget liên quan lại với nhau một cách có trật tự và thẩm mỹ.

Bộ sưu tập Container Widgets

QGroupBox - Hộp nhóm

QGroupBox tạo ra một khung với tiêu đề để gom nhóm các widget liên quan. Có thể bật tính năng checkable (có checkbox ở tiêu đề). Dùng để nhóm các radio button, checkbox cùng chủ đề.

QTabWidget - Widget Tab

QTabWidget là một trong những widget hữu ích nhất - tạo ra giao diện đa tab như trình duyệt web hay VS Code! Mỗi tab chứa một trang nội dung độc lập. Lý tưởng cho ứng dụng cài đặt phức tạp, form nhiều bước.

 tab_widget = QTabWidget()

 tab_widget.addTab(page1, "Thông tin cá nhân")

 tab_widget.addTab(page2, "Cài đặt tài khoản")

 tab_widget.addTab(page3, "Thông báo")

QStackedWidget - Widget chồng lớp

QStackedWidget chứa nhiều trang nhưng chỉ hiển thị một trang tại một thời điểm. Khác QTabWidget ở chỗ không có tab UI - bạn điều khiển trang nào hiện thị bằng code. Lý tưởng để tạo wizard/step-by-step flow.

QScrollArea - Khu vực cuộn

QScrollArea thêm thanh cuộn vào bất kỳ widget nào khi nội dung lớn hơn vùng hiển thị. Không thể thiếu khi hiển thị danh sách dài, hình ảnh lớn, hay form phức tạp trên màn hình nhỏ.

QDockWidget - Widget neo đậu

QDockWidget tạo ra các panel có thể di chuyển, neo đậu vào các cạnh của cửa sổ chính, hoặc tách ra thành cửa sổ độc lập - giống như các panel trong Photoshop hay Visual Studio!

7. Hoàn Thiện Bộ Công Cụ

Input Widgets - Nhập liệu chuyên nghiệp

PyQt5 cung cấp bộ widget nhập liệu đa dạng, mỗi widget được tối ưu cho một kiểu dữ liệu cụ thể:

QLineEdit - Ô nhập liệu một dòng

QLineEdit là widget nhập văn bản một dòng cơ bản nhưng cực kỳ giàu tính năng. Hỗ trợ: chế độ mật khẩu (ẩn ký tự), giới hạn độ dài, input validation, placeholder text, chế độ read-only.

 le = QLineEdit()

 le.setPlaceholderText("Nhập email của bạn...")

 le.setEchoMode(QLineEdit.Password)    # Chế độ mật khẩu

 le.setMaxLength(50)                   # Giới hạn 50 ký tự

 le.setStyleSheet("border: 1px solid green")  # Validate OK

QTextEdit - Trình soạn thảo đa dòng

QTextEdit là widget soạn thảo văn bản đa dòng với đầy đủ tính năng: hỗ trợ HTML formatting, bold/italic/underline, undo/redo, tìm kiếm và thay thế. Phù hợp cho ứng dụng email, blog, ghi chú.

QSpinBox & QDoubleSpinBox - Nhập số

QSpinBox cho nhập số nguyên, QDoubleSpinBox cho số thực - đều có nút tăng/giảm và có thể thiết lập giá trị min/max/step. Lý tưởng cho: số lượng, giá tiền, độ tuổi, v.v.

QSlider & QDial - Điều khiển dạng kéo

QSlider tạo ra thanh trượt nằm ngang hoặc dọc. QDial tạo ra núm vặn tròn như điều chỉnh âm lượng. Cả hai thích hợp cho: điều chỉnh âm lượng, độ sáng, tốc độ, kích thước.

QDateEdit & QTimeEdit - Ngày giờ

QDateEdit, QTimeEdit và QDateTimeEdit cung cấp widget nhập ngày/giờ chuyên dụng với calendar popup và spinbox kết hợp. Không bao giờ phải lo người dùng nhập sai định dạng ngày tháng nữa!

Display Widgets - Hiển thị thông tin

QLabel - Nhãn văn bản và hình ảnh

QLabel là widget hiển thị đơn giản nhất nhưng cực kỳ đa năng - hiển thị text, HTML, hình ảnh, thậm chí animation GIF! Hỗ trợ text alignment, word wrap, rich text với HTML tags.

 lbl = QLabel("<b>Chào mừng đến với PyQt5!</b>")

 lbl.setPixmap(QPixmap("logo.png").scaled(200, 100))

 lbl.setMovie(QMovie("animation.gif"))

QProgressBar - Thanh tiến trình

QProgressBar hiển thị tiến trình hoàn thành của một tác vụ. Hỗ trợ chế độ "indeterminate" (animation chạy liên tục khi không biết tổng thời gian) và chế độ xác định phần trăm 0-100%.

QGraphicsView - Khung Canvas đồ họa

QGraphicsView kết hợp với QGraphicsScene tạo ra một canvas đồ họa 2D mạnh mẽ - vẽ hình, hiển thị nhiều layer, hỗ trợ zoom và pan. Lý tưởng cho ứng dụng vẽ sơ đồ, bản đồ, bảng mạch.

QLCDNumber - Màn hình LCD

QLCDNumber hiển thị số theo phong cách màn hình LCD kỹ thuật số - cực kỳ thú vị cho đồng hồ đếm ngược, hiển thị điểm số, nhiệt độ, v.v.

8. Bắt đầu hành trình PyQt5 của bạn!

Chúng ta đã thấy rõ ràng rằng PyQt5 không chỉ là một thư viện GUI - đó là một hệ sinh thái hoàn chỉnh để tạo ra những ứng dụng Python thực sự đẳng cấp.

Từ những ứng dụng đơn giản chỉ vài dòng code đến những hệ thống phức tạp với nhiều tab, bảng dữ liệu, sự kiện phức tạp - PyQt5 đều có thể đáp ứng. Và với Qt Designer, ngay cả người mới học cũng có thể tạo ra giao diện trông như được làm bởi nhà thiết kế chuyên nghiệp.

Tóm tắt lộ trình học PyQt5: Cài đặt PyQt5 → Tạo GUI form đầu tiên → Khám phá Qt Designer → Nắm vững Layout Management → Hiểu Signals & Slots → Làm chủ các nhóm Widget → Xây dựng ứng dụng thực tế hoàn chỉnh.

Những ứng dụng thực tế bạn có thể xây dựng

  • Ứng dụng quản lý thư viện sách với QTableWidget và QDialog
  • Trình phát nhạc với QSlider, QLabel, QProgressBar và các nút điều khiển
  • Công cụ chuyển đổi đơn vị với QComboBox, QSpinBox, QDoubleSpinBox
  • Trình soạn thảo văn bản mini với QTextEdit, QToolBar, QMenuBar
  • Dashboard theo dõi dữ liệu thời gian thực với QGraphicsView và QTimer
  • Ứng dụng đăng nhập bảo mật với QLineEdit (EchoMode), QDialog, QMessageBox

Tài nguyên học tập

Để tiếp tục hành trình PyQt5 của bạn, hãy tham khảo:

  • Tài liệu chính thức Qt: https://doc.qt.io - kho tàng kiến thức đầy đủ nhất
  • Cuốn sách "Python GUI with PyQt" - Saurabh Chandrakar & Dr. Nilesh Bhaskarrao Bahadure (BPB Online, 2024)
  • Cộng đồng Discord của sách: https://discord.bpbonline.com
  • PyQt5 API Reference: https://www.riverbankcomputing.com/static/Docs/PyQt5/

"Hành trình ngàn dặm bắt đầu từ một bước chân đầu tiên."

Bước chân đầu tiên của bạn với PyQt5 hôm nay chính là:

pip install pyqt5

Chúc bạn tạo ra những giao diện Python tuyệt vời!

Tài liệu tham khảo:

Saurabh Chandrakar & Dr. Nilesh Bhaskarrao Bahadure (2023), Python GUI with PyQt: Learn to build modern and stunning GUIs in Python with PyQt5 and Qt Designer, BPB Publications (https://www.amazon.com/Python-GUI-PyQt-stunning-Designer/dp/935551557X)

ThS. Trương Châu Long - Trưởng bộ môn CNTT - HTTT