Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
PyQt là gì? Tạo một chương trình "Hello World".
Trong bài viết này, bạn sẽ tìm hiểu cách tạo một ứng dụng đơn giản với PyQt, hiển thị thông báo "Hello World". Đây là một bước khởi đầu lý tưởng để làm quen với PyQt, một công cụ mạnh mẽ cho phép bạn xây dựng giao diện người dùng đồ họa (GUI) trên nhiều nền tảng. Hướng dẫn sẽ giới thiệu các khái niệm cơ bản và quy trình tạo một chương trình PyQt đầu tiên, giúp bạn nắm vững nền tảng để phát triển các ứng dụng phức tạp hơn trong tương lai.
PyQt là gì?
PyQt là một bộ thư viện cho phép bạn sử dụng các công cụ và thành phần của Qt trong các ứng dụng Python. Qt là một framework phát triển ứng dụng đa nền tảng mạnh mẽ, được sử dụng để tạo các giao diện người dùng đồ họa (GUI) cho phần mềm chạy trên nhiều hệ điều hành như Windows, macOS, Linux, và các nền tảng di động.
PyQt cung cấp các binding (kết nối) để Python có thể sử dụng các công cụ của Qt, giúp bạn tạo ra các ứng dụng GUI mạnh mẽ với Python. PyQt hỗ trợ nhiều phiên bản của Qt, như PyQt4, PyQt5 và PyQt6, trong đó PyQt6 là phiên bản mới nhất.
Với PyQt, bạn có thể tạo ra các ứng dụng phức tạp với các thành phần như cửa sổ, nút, hộp thoại, menu, và nhiều thành phần GUI khác, cùng với việc quản lý sự kiện và tương tác người dùng một cách linh hoạt. PyQt thường được sử dụng trong các dự án phát triển phần mềm cần giao diện đồ họa đẹp mắt và chuyên nghiệp.
Bài viết này được đăng tại [free tuts .net]
Cài đặt gói PyQt
PyQt là một binding của Python cho bộ công cụ ứng dụng đa nền tảng Qt. Vì PyQt là một gói của bên thứ ba, nên bạn cần cài đặt nó trước khi sử dụng.
PyQt6 là phiên bản mới nhất của PyQt tại thời điểm viết hướng dẫn này. Để cài đặt PyQt6 bằng PyPI trên Windows, bạn sử dụng lệnh pip sau:
pip install PyQt6
Nếu bạn sử dụng macOS hoặc Linux, bạn cần sử dụng lệnh pip3:
pip3 install PyQt6
Tạo chương trình PyQt đầu tiên
Chương trình sau đây hiển thị một cửa sổ với tiêu đề "Hello World" trên màn hình:
from PyQt6.QtWidgets import QApplication, QWidget # Tạo đối tượng QApplication app = QApplication([]) # Tạo cửa sổ chính window = QWidget(windowTitle='Hello World') window.show() # Bắt đầu vòng lặp sự kiện app.exec()
Để chạy ứng dụng, bạn sử dụng lệnh python:
python main.py
Nếu bạn sử dụng macOS hoặc Linux, bạn có thể sử dụng lệnh python3:
python3 main.py
Chương trình trên sẽ tạo ra một cửa sổ như sau:
Cách hoạt động
Đầu tiên, bạn cần import các lớp QApplication
và QWidget
từ PyQt6.QtWidgets
:
from PyQt6.QtWidgets import QApplication, QWidget
Tiếp theo, tạo một đối tượng QApplication
:
app = QApplication([])
Mỗi ứng dụng PyQt cần một và chỉ một đối tượng QApplication
.
Sau đó, tạo một instance của QWidget
với tiêu đề "Hello World" và gọi phương thức show()
để hiển thị cửa sổ:
window = QWidget(windowTitle='Hello World') window.show()
Cuối cùng, gọi phương thức exec()
của đối tượng QApplication
để bắt đầu vòng lặp sự kiện:
app.exec()
Giới thiệu về vòng lặp sự kiện trong PyQt
Mỗi ứng dụng PyQt cần có một đối tượng QApplication
, đối tượng này giữ vòng lặp sự kiện của ứng dụng.
Vòng lặp sự kiện chịu trách nhiệm quản lý tất cả các sự kiện của ứng dụng, bao gồm các tương tác của người dùng với giao diện đồ họa.
Khi bạn tương tác với ứng dụng Qt, chẳng hạn như nhấn một phím hoặc nhấp vào một nút, PyQt sẽ tạo ra một sự kiện và đặt nó vào hàng đợi sự kiện.
Vòng lặp sự kiện sẽ liên tục kiểm tra hàng đợi sự kiện. Nếu vòng lặp sự kiện phát hiện một sự kiện, nó sẽ chuyển sự kiện đó đến một handler cụ thể.
Handler sự kiện sẽ xử lý sự kiện và trả quyền điều khiển lại cho vòng lặp sự kiện để xử lý các sự kiện tiếp theo.
Hỗ trợ các đối số dòng lệnh & mã trả về
Một chương trình PyQt có thể chấp nhận một hoặc nhiều đối số dòng lệnh. Để làm điều này, bạn cần truyền argv
từ module sys
vào QApplication
như sau:
app = QApplication(sys.argv)
Phương thức app.exec()
trả về 0 nếu thành công hoặc một giá trị khác nếu thất bại.
Nếu một chương trình PyQt được thực thi từ Shell (dòng lệnh trên Windows hoặc Terminal trên macOS và Linux), nó nên trả về một mã chỉ định thành công hay thất bại của chương trình.
Để làm điều này, bạn gọi hàm sys.exit()
và truyền kết quả của app.exec()
vào nó như sau:
sys.exit(app.exec())
Bằng cách này, Shell có thể nhận mã trả về từ ứng dụng PyQt.
Tạo mẫu chương trình Qt
Ví dụ sau minh họa chương trình "Hello World" trong PyQt theo cách hướng đối tượng:
import sys from PyQt6.QtWidgets import QApplication, QWidget class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Đặt tiêu đề cửa sổ self.setWindowTitle('Hello World') # Hiển thị cửa sổ self.show() if __name__ == '__main__': app = QApplication(sys.argv) # Tạo cửa sổ chính window = MainWindow() # Bắt đầu vòng lặp sự kiện sys.exit(app.exec())
Cách hoạt động
Đầu tiên, định nghĩa lớp MainWindow
kế thừa từ QWidget
:
class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Đặt tiêu đề cửa sổ self.setWindowTitle('Hello World') # Hiển thị cửa sổ self.show()
Trong phương thức __init__()
, chúng ta đặt tiêu đề cửa sổ và gọi phương thức show()
để hiển thị cửa sổ.
Tiếp theo, thêm khối if __name__ == '__main__':
để bao gồm mã nếu chương trình được thực thi trực tiếp. Nếu script được import như một module, mã trong khối này sẽ không được thực thi.
if __name__ == '__main__':
Sau đó, tạo một đối tượng QApplication
:
app = QApplication(sys.argv)
Sau đó, tạo một instance mới của MainWindow
:
window = MainWindow()
Cuối cùng, bắt đầu vòng lặp sự kiện:
sys.exit(app.exec())
Kết bài
Mỗi ứng dụng PyQt có một và chỉ một đối tượng QApplication
. Đối tượng QApplication
giữ một vòng lặp sự kiện. Vòng lặp sự kiện quản lý tất cả các sự kiện của ứng dụng PyQt, liên tục kiểm tra hàng đợi sự kiện và chuyển tiếp sự kiện đến các handler của chúng. Gọi app.exec()
để bắt đầu vòng lặp sự kiện. Sử dụng QMainWindow
để tạo cửa sổ chính cho ứng dụng PyQt và gọi phương thức show()
để hiển thị cửa sổ trên màn hình.