Hướng dẫn PyQt5 kèm ví dụ: Tạo Python Giao diện người dùng đồ họa (GUI) với Qt
⚡ Tóm tắt thông minh
PyQt là một Python Giao diện liên kết cho bộ công cụ tiện ích Qt đa nền tảng, cho phép các nhà phát triển xây dựng giao diện người dùng đồ họa (GUI) gốc cho máy tính để bàn. Nó bao bọc hơn sáu trăm C++ Các lớp học bao gồm cửa sổ, nút bấm, bố cục, tín hiệu, khe cắm và chủ đề cho Windows, macOSvà Linux.

Các phần bên dưới sẽ hướng dẫn bạn từ những kiến thức cơ bản về PyQt đến cài đặt, các widget cốt lõi, bố cục và giao diện, kèm theo các ví dụ có thể chạy được.
PyQt là gì?
PyQt là một Python ràng buộc của bộ công cụ tiện ích nguồn mở Qt, bộ công cụ này cũng có chức năng như một khung phát triển ứng dụng đa nền tảng. Qt là một phổ biến C++ Khung phần mềm để viết ứng dụng giao diện người dùng đồ họa (GUI) cho tất cả các nền tảng máy tính để bàn, di động và nhúng chính (nó hỗ trợ Linux, Windows, macOS, Android, iOS, Raspberry Pi, v.v.).
PyQt là phần mềm mã nguồn mở được phát triển và duy trì bởi Riverbank Computing, một công ty có trụ sở tại Anh, trong khi Qt được phát triển bởi một công ty Phần Lan có tên là The Qt Company.
Các tính năng của PyQt
Dưới đây là các tính năng quan trọng của PyQt:
PyQt bao gồm hơn sáu trăm lớp, bao quát nhiều tính năng khác nhau, chẳng hạn như:
- Giao diện người dùng đồ họa
- Cơ sở dữ liệu SQL
- Bộ công cụ web
- xử lý XML
- mạng
Các tính năng này có thể được kết hợp để tạo ra giao diện người dùng tiên tiến cũng như các ứng dụng độc lập. Rất nhiều công ty lớn trong mọi ngành công nghiệp đều sử dụng Qt. Một số ví dụ là LG, Mercedes, AMD, Panasonic và Harman.
Phiên bản PyQt
PyQt có hai phiên bản, PyQt4 và PyQt5. PyQt4 cung cấp mã kết nối để liên kết các phiên bản 4.x và 5.x của khung Qt, trong khi PyQt5 chỉ cung cấp liên kết cho các phiên bản 5.x. Do đó, PyQt5 không tương thích ngược với các mô-đun đã lỗi thời của phiên bản cũ hơn. Trong hướng dẫn giao diện người dùng PyQt này, PyQt5 sẽ được sử dụng để minh họa các ví dụ. Ngoài hai phiên bản này, Riverbank Computing cũng cung cấp PyQt3D—phiên bản Python các ràng buộc cho khung Qt3D. Qt3D là một khung ứng dụng được sử dụng để tạo các hệ thống mô phỏng thời gian thực với kết xuất 2D/3D.
Cách cài đặt PyQt5
Trong hướng dẫn PyQt5 này, chúng ta sẽ thấy hai cách cài đặt PyQt:
- Sử dụng tập tin Bánh xe
- Xây dựng và cài đặt từ nguồn
Qt (phát âm là cute) là một hệ thống phức tạp và cơ sở mã PyQt chứa các mã đã biên dịch C++ và Python mã dưới mui xe. Kết quả là, việc xây dựng và cài đặt nó từ nguồn là một quá trình phức tạp so với các phương pháp khác. Python thư viện. Tuy nhiên, bạn có thể dễ dàng cài đặt PyQt5 bằng bánh xe.
Lắp đặt bằng bánh xe
Bánh xe là tiêu chuẩn mới Python định dạng đóng gói và phân phối. Nói một cách đơn giản, bánh xe là một tệp ZIP có tên đặc biệt và .cái gì phần mở rộng tập tin. Bánh xe có thể được cài đặt bằng cách sử dụng pip (Pythontrình quản lý gói của), được bao gồm theo mặc định trong các phiên bản gần đây của Python.
Vì vậy, nếu bạn có Python 3.4 hoặc mới hơn được cài đặt, bạn đã có pip. Tuy nhiên, nếu bạn đang sử dụng phiên bản cũ hơn của PythonBạn cần tải xuống và cài đặt pip trước khi tiếp tục. Bạn có thể tìm hướng dẫn tại liên kết này: https://pypi.org/project/pip/.
Để cài đặt PyQt5:
Bước 1) Mở Command prompt.
Mở Dấu nhắc Lệnh hoặc PowerShell trong Windows máy móc.
Bước 2) Nhập nội dung sau.
pip install PyQt5
Bước 3) Cài đặt thành công.
Bước này trong hướng dẫn PyQt5 này sẽ tải xuống gói whl PyQt5 (khoảng 50 MB) và cài đặt nó trên hệ thống của bạn.
Ngoài ra, bạn cũng có thể tải xuống một Windows nhị phân cho phiên bản của Python được cài đặt trên máy tính của bạn.
Sau khi hoàn tất, hãy chuyển sang phần tiếp theo trong hướng dẫn PyQt5 này để viết ứng dụng GUI đầu tiên của bạn.
PyQt cơ bản Concepts và chương trình
Giờ bạn đã cài đặt PyQt5 thành công trên máy tính, bạn đã sẵn sàng viết mã. Python Ứng dụng giao diện người dùng đồ họa (GUI).
Chúng ta hãy bắt đầu với một ứng dụng đơn giản trong hướng dẫn PyQt5 này, ứng dụng này sẽ hiển thị một cửa sổ trống trên màn hình của bạn.
Cháy lên của bạn Python IDLE và nhập nội dung sau:
Chương trình 1
import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99") w.show() sys.exit(app.exec_())
Lưu tệp đó với tên app.py (tên không quan trọng) và nhấn F5 để chạy chương trình. Hoặc, chỉ cần nhấp đúp vào tệp đã lưu để khởi chạy ứng dụng. Nếu bạn đã làm đúng tất cả các bước, một cửa sổ mới sẽ mở ra với tiêu đề Guru99 như hình bên dưới.
Tuyệt vời! Nó hoạt động rồi. Tuy không nhiều, nhưng như vậy là đủ để nắm được những kiến thức cơ bản. Giờ trong hướng dẫn PyQt này, chúng ta hãy cùng xem chi tiết từng dòng lệnh trong chương trình của bạn làm gì.
from PyQt5.QtWidgets import QApplication, QWidget
Câu lệnh này nhập tất cả các mô-đun bạn cần để tạo GUI vào không gian tên hiện tại. Mô-đun QtWidgets chứa tất cả các tiện ích chính mà bạn sẽ sử dụng trong phần này Python Hướng dẫn Qt.
app = QApplication(sys.argv)
Ở đây, bạn đang tạo một đối tượng của lớp QApplication. Bước này là cần thiết cho PyQt5; mọi ứng dụng giao diện người dùng phải tạo một phiên bản QApplication, như một loại điểm truy cập vào ứng dụng. Nếu bạn không tạo nó, lỗi sẽ được hiển thị.
sys.argv là danh sách các tham số dòng lệnh mà bạn có thể chuyển tới ứng dụng khi khởi chạy nó thông qua shell hoặc trong khi tự động hóa giao diện.
Trong ví dụ PyQt5 này, bạn không truyền bất kỳ tham số nào cho QApplication. Do đó, bạn cũng có thể thay thế nó bằng đoạn mã bên dưới mà thậm chí không cần phải nhập mô-đun sys.
app = QApplication([])
w = QWidget()
Tiếp theo, chúng ta tạo một đối tượng của lớp QWidget. QWidget là lớp cơ sở của tất cả các đối tượng UI trong Qt và hầu như mọi thứ bạn thấy trong ứng dụng đều là tiện ích. Bao gồm hộp thoại, văn bản, nút, thanh, v.v. Tính năng cho phép bạn thiết kế giao diện người dùng phức tạp là các tiện ích có thể được lồng vào nhau, tức là bạn có thể có một tiện ích bên trong một tiện ích, nằm bên trong một tiện ích khác. Bạn sẽ thấy điều này hoạt động trong phần tiếp theo.
w.resize(300,300)
Phương thức thay đổi kích thước của lớp QWidget cho phép bạn đặt kích thước của bất kỳ tiện ích nào. Trong trường hợp này, bạn đã thay đổi kích thước cửa sổ thành 300px x 300px.
Ở đây, bạn cần nhớ rằng các widget có thể lồng nhau; widget ngoài cùng (tức là widget không có widget cha) được gọi là Window.
w.setWindowTitle("Guru99")
Phương thức setWindowTitle() cho phép bạn truyền một chuỗi làm đối số, chuỗi này sẽ thiết lập tiêu đề của cửa sổ thành chuỗi bạn truyền vào. Trong ví dụ PyQt5, thanh tiêu đề sẽ hiển thị Guru99.
w.show()
show() chỉ hiển thị tiện ích trên màn hình điều khiển.
sys.exit(app.exec_())
Phương thức app.exec_() khởi động Qt/C++ vòng lặp sự kiện. Như bạn đã biết, PyQt phần lớn được viết bằng C++ và sử dụng cơ chế vòng lặp sự kiện để thực hiện thực thi song song. Phương thức `app.exec_()` chuyển quyền điều khiển cho Qt, Qt sẽ chỉ thoát ứng dụng khi người dùng đóng ứng dụng từ giao diện người dùng. Đó là lý do tại sao tổ hợp phím Ctrl+C sẽ không thoát ứng dụng như trong các trường hợp khác. Python các chương trình. Vì Qt có quyền kiểm soát ứng dụng, Python các sự kiện không được xử lý trừ khi chúng tôi thiết lập chúng bên trong ứng dụng. Ngoài ra, hãy lưu ý rằng phương thức exec có dấu gạch dưới trong tên của nó; điều này là do exec() đã là một từ khóa trong Python và dấu gạch dưới giải quyết được xung đột tên gọi.
Bên kia những ô cửa sổ trống rỗng
Ở phần trước, bạn đã thấy cách tạo một widget cơ bản trong Qt. Giờ là lúc tạo ra một số giao diện phức tạp hơn mà người dùng có thể tương tác thực sự. Một lần nữa, hãy khởi động Qt... IDLE và viết như sau.
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox def dialog(): mbox = QMessageBox() mbox.setText("Your allegiance has been noted") mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru") mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_() if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99") label = QLabel(w) label.setText("Behold the Guru, Guru99") label.move(100,130) label.show() btn = QPushButton(w) btn.setText('Beheld') btn.move(110,150) btn.show() btn.clicked.connect(dialog) w.show() sys.exit(app.exec_())
Lưu tệp tin dưới tên appone.py hoặc bất kỳ tên nào bạn thích và nhấn F5 để chạy chương trình. Nếu bạn không mắc lỗi nào, chương trình sẽ hoạt động bình thường. IDLE sẽ mở một cửa sổ mới với một số văn bản và một nút như hiển thị bên dưới.
- Khi bạn nhấp vào nút ở cửa sổ đầu tiên, một hộp tin nhắn mới sẽ mở ra với nội dung bạn đã viết.
- Bây giờ bạn có thể nhấp vào nút Ẩn chi tiết/Hiển thị chi tiết để chuyển đổi chế độ hiển thị của văn bản bổ sung.
Như bạn thấy, vì chúng ta chưa đặt tiêu đề cửa sổ nào trong hộp thoại thông báo, nên tiêu đề mặc định đã được cung cấp. Python chính nó.
Giờ thì nó đã hoạt động rồi, hãy cùng xem đoạn mã bổ sung mà bạn đã thêm vào ví dụ PyQt5 trước đó.
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox
Điều này sẽ nhập thêm một số tiện ích mà bạn đã sử dụng trong các ví dụ PyQt5, cụ thể là QLabel, QPushButton và QMessageBox.
def dialog(): mbox = QMessageBox() mbox.setText("Your allegiance has been noted") mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru") mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_()
Tại đây, bạn đã định nghĩa một phương thức có tên là dialog để tạo một tiện ích hộp thông báo và đặt một số văn bản vào các nút và trường khác.
Phương thức hộp thoại được gọi từ khối chính của chương trình khi một nút được nhấn trong một tiện ích cụ thể (trong trường hợp này là Nút nhấn btn). Sự kiện nhấp chuột được kích hoạt trên nút đó sẽ khiến chức năng này được thực thi. Hàm như vậy được gọi là slot trong Qt và bạn sẽ tìm hiểu thêm về tín hiệu và Nổ hũ trong các đoạn sắp tới.
if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle("Guru99")
Đây là phần chính của ứng dụng và, giống như ví dụ trước, bạn bắt đầu bằng cách tạo một thể hiện của QApplication, tiếp theo là một widget đơn giản, tức là một thể hiện của QWidget.
label = QLabel(w)
btn = QPushButton(w)
Bạn đã thêm hai tiện ích mới trong ứng dụng này: QLabel và QPushButton. QLabel được sử dụng để in văn bản hoặc phần giữ chỗ không thể chỉnh sửa bên trong một tiện ích, trong khi QPushButton được sử dụng để tạo nút có thể nhấp.
Điều quan trọng cần lưu ý ở đây là khi bạn tạo các đối tượng nhãn và btn, bạn đang chuyển đối tượng cửa sổ (w) cho các hàm tạo của QLabel và QPushButton. Đây là cách hoạt động lồng nhau trong PyQt5. Để tạo một tiện ích bên trong một tiện ích khác, bạn chuyển tham chiếu của tiện ích mẹ cho hàm tạo của con.
label.move(100,130) btn.move(110,150)
move() được sử dụng để đặt vị trí của một widget so với widget gốc của nó. Trong trường hợp đầu tiên, nhãn sẽ được di chuyển 100px từ bên trái và 130px từ đầu cửa sổ.
Tương tự, nút này sẽ được đặt cách 110px từ bên trái và 150px từ trên cùng của cửa sổ. Ví dụ này là một cách thô sơ để đạt được bố cục và thường không được sử dụng trong sản xuất; nó chỉ được đưa vào đây cho mục đích học tập. Qt hỗ trợ các bố cục khác nhau mà bạn sẽ thấy chi tiết trong các phần sắp tới của hướng dẫn PyQt này.
btn.clicked.connect(dialog)
Cuối cùng, đây là một ví dụ về tín hiệu và khe cắm trong Qt. Trong các ứng dụng dựa trên giao diện người dùng đồ họa (GUI), các hàm được thực thi dựa trên các hành động do người dùng thực hiện, chẳng hạn như di chuột qua một phần tử hoặc nhấp vào một nút. Những hành động này được gọi là sự kiện. Hãy nhớ lại rằng phương thức app.exec_() chuyển quyền điều khiển sang Qt sự kiện vòng. Đây chính là mục đích của vòng lặp sự kiện: lắng nghe các sự kiện và thực hiện các hành động phản hồi.
Bất cứ khi nào một sự kiện xảy ra, chẳng hạn như người dùng nhấp vào nút, tiện ích Qt tương ứng sẽ đưa ra một thông báo tín hiệu. Những tín hiệu này có thể được kết nối với Python chức năng (như chức năng hộp thoại trong ví dụ này) để chức năng này được thực thi khi tín hiệu được kích hoạt. Những chức năng này được gọi Nổ hũ trong biệt ngữ Qt.
Tiếp theo, cú pháp cơ bản để kích hoạt một hàm khe (slot function) khi nhận được tín hiệu từ một sự kiện như sau:
widget.signal.connect(slot)
Điều này có nghĩa là bất cứ khi nào một tín hiệu được kích hoạt bởi một phụ tùng, kết nối trò chơi Slot chức năng sẽ được thực thi. Tóm lại, tín hiệu và khe cắm được Qt sử dụng để liên lạc giữa các đối tượng và tạo điều kiện thuận lợi cho khả năng tương tác và tái sử dụng thành phần.
Bây giờ bạn đã biết cách lồng các tiện ích và triển khai tương tác bằng tín hiệu và vị trí, đây là danh sách các tiện ích hữu ích và các lớp khác mà bạn có thể sử dụng trong ứng dụng PyQt của mình.
Thành phần và Widget
Có một số lượng lớn các tiện ích có sẵn trong PyQt để tạo ứng dụng GUI. Tuy nhiên, với PyQt5, đã có sự xáo trộn lại các lớp thành các mô-đun khác nhau và các bản sửa đổi trong giấy phép.
Do đó, việc nắm được cấu trúc tổng quan của PyQt5 là rất quan trọng. Trong phần này, bạn sẽ thấy cách PyQt5 được tổ chức nội bộ và tìm hiểu về các mô-đun, thư viện và lớp API khác nhau do PyQt5 cung cấp.
Cấu trúc thư mục PyQt5
Đây là những module cơ bản được sử dụng bởi Pythonràng buộc Qt của, cụ thể là PyQt5.
- QtPhương pháp này kết hợp tất cả các lớp/mô-đun được đề cập bên dưới thành một mô-đun duy nhất. Điều này làm tăng đáng kể lượng bộ nhớ mà ứng dụng sử dụng. Tuy nhiên, việc quản lý khung phần mềm sẽ dễ dàng hơn vì chỉ cần nhập một mô-đun duy nhất.
- QtCore: Chứa các lớp phi đồ họa cốt lõi được sử dụng bởi các mô-đun khác. Đây là nơi triển khai vòng lặp sự kiện Qt, tín hiệu và kết nối khe cắm, v.v.
- QtWidgetChứa hầu hết các widget có sẵn trong PyQt5.
- QtGui: Chứa các thành phần GUI và mở rộng mô-đun QtCore.
- Mạng Qt: Chứa các lớp dùng để thực hiện lập trình mạng thông qua Qt. Nó hỗ trợ máy chủ TCP, ổ cắm TCP, ổ cắm UDP, xử lý SSL, phiên mạng và tra cứu DNS.
- QtĐa phương tiệnCung cấp chức năng đa phương tiện cấp thấp.
- QtSql: thực hiện tích hợp cơ sở dữ liệu cho cơ sở dữ liệu SQL. Hỗ trợ ODBC, MySQL, Oracle, SQLitevà PostgreSQL.
Tiện ích PyQt5
Dưới đây là danh sách các widget được sử dụng thường xuyên nhất trong PyQt5:
- QLineSửa đổi: Đây là trường nhập liệu cho phép người dùng nhập một dòng văn bản.
line = QLineEdit()
- Nút QRadioĐây là một trường nhập liệu có nút chọn, tương tự như các nút radio trong HTML.
rad = QRadioButton("button title") rad.setChecked(True) #to select the button by default.
- QComboBox: Nó được sử dụng để hiển thị menu thả xuống với danh sách các mục có thể chọn.
drop = QComboBox(w) drop.addItems(["item one", "item two", "item three"])
- QKiểm traBox: Hiển thị hộp vuông có thể chọn ở phía trước nhãn, hộp này sẽ được đánh dấu nếu được chọn, tương tự như nút radio.
check = QCheckBox("button title")
- QMenuBar: Nó hiển thị một thanh menu ngang ở phía trên cùng của cửa sổ. Bạn chỉ có thể thêm các đối tượng thuộc lớp QMenu vào thanh này. Các đối tượng QMenu đó có thể chứa thêm chuỗi ký tự, đối tượng QAction hoặc các đối tượng QMenu khác.
- QToolBar: Nó là một thanh hoặc khung ngang có thể di chuyển được trong cửa sổ. Nó có thể chứa các nút và các vật dụng khác.
- QTabChức năng này được sử dụng để chia nội dung của một cửa sổ thành nhiều trang có thể truy cập thông qua các tab khác nhau ở phía trên tiện ích. Nó bao gồm hai phần: thanh tab và trang tab.
- QScrollBarNó được sử dụng để tạo thanh cuộn cho phép người dùng cuộn lên xuống trong cửa sổ. Nó bao gồm một thanh trượt di động và một thanh trượt khác. track, và hai nút để cuộn thanh trượt lên hoặc xuống.
scroll = QScrollBar()
- Bộ chia Q: Bộ chia được sử dụng để phân tách nội dung của một cửa sổ sao cho các widget được nhóm lại hợp lý và không bị lộn xộn. QSplitter là một trong những trình xử lý bố cục chính có sẵn trong PyQt5 và được sử dụng để phân chia nội dung theo cả chiều ngang và chiều dọc.
- QDock: Một widget neo (dock widget) là một cửa sổ con có hai thuộc tính: nó có thể được di chuyển bên trong cửa sổ chính và có thể được neo bên ngoài cửa sổ cha đến một vị trí khác trên màn hình.
Bố cục và Chủ đề
Trong các ví dụ PyQt5 trước đây, bạn chỉ sử dụng các phương thức move() và resize() để đặt vị trí của các tiện ích trong GUI của mình.
Tuy nhiên, PyQt có một công cụ quản lý bố cục mạnh mẽ có thể được sử dụng để tạo giao diện người dùng nâng cao cho các ứng dụng. Trong phần này, bạn sẽ tìm hiểu về hai lớp quan trọng được sử dụng trong Qt để tạo và quản lý bố cục.
- QBoxBố trí
- QGridLayout
QBoxBố trí
QBoxBố cục được sử dụng để căn chỉnh các tiện ích con của bố cục theo hàng ngang hoặc dọc. Hai lớp lợi ích kế thừa từ QBoxBố cục là:
- QHBoxBố cục: dùng để xếp các widget con theo chiều ngang.
- QVBoxBố cục: dùng để sắp xếp các widget con theo chiều dọc.
Ví dụ: đây là cách ba nút căn chỉnh với QHBoxBố cục sẽ nhìn.
import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() w.setWindowTitle("Musketeers") btn1 = QPushButton("Athos") btn2 = QPushButton("Porthos") btn3 = QPushButton("Aramis") hbox = QHBoxLayout(w) hbox.addWidget(btn1) hbox.addWidget(btn2) hbox.addWidget(btn3) w.show() sys.exit(app.exec_())
Và đây là giao diện của chúng trong QVBoxBố trí.
import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() w.setWindowTitle("Musketeers") btn1 = QPushButton("Athos") btn2 = QPushButton("Porthos") btn3 = QPushButton("Aramis") vb = QVBoxLayout(w) vb.addWidget(btn1) vb.addWidget(btn2) vb.addWidget(btn3) w.show() sys.exit(app.exec_())
Hàm duy nhất cần được giải thích vào thời điểm này là phương thức addWidget(). Nó được sử dụng để chèn các widget vào HBox hoặc VBox cách trình bày. Nó cũng được sử dụng trong các bố cục khác, nơi nó nhận một số tham số khác nhau như bạn sẽ thấy trong phần tiếp theo. Các tiện ích sẽ xuất hiện bên trong bố cục theo thứ tự bạn chèn chúng.
QGridLayout
QGridLayout được sử dụng để tạo giao diện trong đó các widget được bố trí dưới dạng lưới (như ma trận hoặc mảng 2D). Để chèn các phần tử vào bố cục lưới, bạn có thể sử dụng biểu diễn ma trận để xác định số hàng và cột trong lưới cũng như vị trí của các phần tử đó.
Ví dụ, để tạo lưới 3*3 (tức là lưới có ba hàng và ba cột), bạn sẽ viết mã sau:
Import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() grid = QGridLayout(w) for i in range(3): for j in range(3): grid.addWidget(QPushButton("Button"),i,j) w.show() sys.exit(app.exec_())
Đây sẽ là đầu ra:
Phương thức addWidget() trong bố cục lưới nhận các đối số sau:
- Đối tượng widget mà bạn muốn thêm vào lưới
- Tọa độ x của vật
- Tọa độ y của vật thể
- Khoảng cách hàng (mặc định = 0)
- Khoảng cách cột (mặc định = 0)
Để hiểu rõ hơn, bạn có thể tự tay chèn từng widget như hình bên dưới.
import sys from PyQt5.QtWidgets import * if __name__ == "__main__": app = QApplication([]) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton("Button one"),0,0) grid.addWidget(QPushButton("Button two"),0,1) grid.addWidget(QPushButton("Button three"),1,0) grid.addWidget(QPushButton("Button four"),1,1) w.show() sys.exit(app.exec_())
Lưới sẽ trông như thế này:
Bạn cũng có thể chuyển các tham số rowpan và colspan cho addWidget() để trải rộng trên nhiều hàng hoặc cột.
Ví dụ,
grid.addWidget(QPushButton("Button five"),2,0,1,0)
Điều này sẽ tạo ra một nút trải dài trên cả hai cột.
chủ đề
PyQt5 đi kèm với một số chủ đề tích hợp sẵn mà bạn có thể sử dụng trong ứng dụng của mình. Các setStyle() phương thức được gọi trên phiên bản QApplication được sử dụng để đặt một chủ đề cụ thể cho ứng dụng của bạn.
Ví dụ, thêm dòng mã sau sẽ thay đổi giao diện ứng dụng của bạn từ mặc định sang Fusion.
app.setStyle("Fusion")
Đây là cách ví dụ trước sẽ hiển thị trong giao diện Fusion Theme.
Một chức năng hữu ích khác để tùy chỉnh giao diện ứng dụng của bạn là phương thức setPalette(). Sau đây là đoạn mã để thay đổi màu sắc của các widget khác nhau bằng cách sử dụng setPalette().
import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import * from PyQt5.QtGui import QPalette if __name__ == "__main__": app = QApplication([]) app.setStyle("Fusion") qp = QPalette() qp.setColor(QPalette.ButtonText, Qt.black) qp.setColor(QPalette.Window, Qt.black) qp.setColor(QPalette.Button, Qt.gray) app.setPalette(qp) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton("Button one"),0,0) grid.addWidget(QPushButton("Button two"),0,1) grid.addWidget(QPushButton("Button three"),1,0) grid.addWidget(QPushButton("Button four"),1,1) w.show() sys.exit(app.exec_())
Đây là kết quả.
Để sử dụng phương thức setPalette(), trước tiên bạn cần xác định bảng màu. Điều này được thực hiện bằng cách tạo một đối tượng của lớp QPalette.
qp = QPalette()
Lưu ý rằng lớp QPalette thuộc mô-đun QtGui và bạn cần nhập mô-đun này để nó hoạt động. Sau khi tạo đối tượng QPalette, hãy sử dụng phương thức setColor() để truyền tên của widget mà bạn muốn thay đổi màu sắc và màu sắc bạn muốn thiết lập.
qp.setColor(QPalette.Window, Qt.black)
Thao tác này sẽ thay đổi màu cửa sổ thành màu đen. Sau khi đã xác định bảng màu, hãy sử dụng hàm setPalette() để áp dụng bảng màu đó cho ứng dụng của bạn.
app.setPalette(qp)
Đó là tất cả những gì bạn cần làm nếu muốn tạo một số chủ đề cơ bản cho ứng dụng của mình. PyQt cũng cho phép bạn sử dụng bảng định kiểu để xác định giao diện cho các widget của mình. Nếu đã quen thuộc với CSS, bạn có thể dễ dàng xác định các kiểu nâng cao cho ứng dụng của mình bằng cách sử dụng Qt Style Sheets.












