Hướng dẫn PyQt5 với các ví dụ: Thiết kế GUI sử dụng PyQt trong Python

PyQt là gì?

PyQt là một ràng buộc python của bộ công cụ tiện ích nguồn mở Qt, cũng hoạt động như một khuôn khổ phát triển ứng dụng đa nền tảng. Qt là một C++ framework để viết các ứng dụng GUI cho tất cả các nền tảng máy tính để bàn, thiết bị di động và nhúng chính (hỗ trợ Linux, Windows, Hệ điều hành Mac, Android, iOS, Raspberry Pi, v.v.).

PyQt là một phần mềm miễn phí đượ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 The Qt Company.

Tính năng của PyQT

Dưới đây là các tính năng quan trọng của PyQt:

Tìm hiểu PyQt bao gồm hơn sáu trăm lớp bao gồm nhiều tính năng 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 giao diện người dùng nâng cao cũng như các ứng dụng độc lập. Rất nhiều công ty lớn trong tất cả các ngành sử dụng Qt. Một số ví dụ như LG, Mercedes, AMD, Panasonic, Harman, v.v.

Phiên bản PyQt

PyQt có sẵn trong hai phiên bản, PyQt4 và PyQt5. PyQt4 cung cấp mã keo để 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 không được dùng nữa của phiên bản cũ hơn. Trong hướng dẫn GUI Qt này, PyQt5 sẽ được sử dụng để trình diễn các ví dụ. Ngoài hai phiên bản này,

Riverbank Computing cũng cung cấp PyQt3D—các liên kết python 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 code ẩn. Do đó, đây là một quá trình phức tạp để xây dựng và cài đặt nó từ nguồn so với các thư viện python khác. Tuy nhiên, bạn có thể dễ dàng cài đặt PyQt5 bằng cách sử dụng wheels.

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 Python, bạn phải tải xuống và cài đặt pip trước khi tiếp tục. Bạn có thể tìm kiế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.

cài đặt PyQt5

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.

cài đặt PyQt5

Ngoài ra, bạn cũng có thể tải xuống một Windows nhị phân cho phiên bản 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

Bây giờ bạn đã cài đặt thành công PyQt5 trên máy tính của mình, bạn đã sẵn sàng viết Python Ứng dụng thiết kế GUI.

Hãy bắt đầu với một ứng dụng đơn giản trong hướng dẫn PyQt5 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 con trăn của bạn 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 dưới dạng 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 của bạn để khởi chạy ứng dụng. Nếu bạn đã làm đúng mọi thứ, một cửa sổ mới sẽ mở ra với tiêu đề Guru99 như hiển thị bên dưới.

PyQt cơ bản Concepts

Tuyệt vời! Nó đang hoạt động. Nó không nhiều nhưng cũng đủ để nắm bắt những điều cơ bản. Bây giờ trong hướng dẫn PyQt này, hãy xem chi tiết từng dòng 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 chuyển bất kỳ đối số nào cho QApplications. Do đó, bạn cũng có thể thay thế nó bằng mã bên dưới và 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 nên nhớ rằng các widget có thể được lồng vào nhau, widget ngoài cùng (tức là widget không có cha mẹ) đượ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ố sẽ đặt tiêu đề của cửa sổ thành chuỗi bạn truyền. 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 để triển khai thực thi song song. app.exec_() chuyển quyền điều khiển cho Qt, Qt sẽ thoát khỏi ứng dụng chỉ khi người dùng đóng ứng dụng từ GUI. Đó là lý do tại sao ctrl+c sẽ không thoát khỏi ứng dụng như trong các chương trình python khác. Vì Qt có quyền điều khiển ứng dụng, các sự kiện python không được xử lý trừ khi chúng ta thiết lập chúng bên trong ứng dụng. Ngoài ra, 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 xung đột đặt tên.

Bên kia những ô cửa sổ trống rỗng

Trong phần trước, bạn đã biết cách tạo một widget cơ bản trong Qt. Bây 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ể thực sự tương tác. Một lần nữa, hãy bùng nổ 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 dưới dạng 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, 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.

Ngoài trống rỗng Windows

  1. 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.
  2. 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 có thể thấy, vì chúng ta không đặt bất kỳ tiêu đề cửa sổ nào trong hộp thông báo nên python đã tự cung cấp một tiêu đề mặc định.

Bây giờ nó đã hoạt động, hãy xem 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ệuNổ 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à như trong ví dụ trước, bạn bắt đầu bằng cách tạo một phiên bản QApplication, theo sau là một tiện ích đơn giản, tức là một phiên bản 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à ví dụ về tín hiệu và vị trí trong Qt. Trong các ứng dụng dựa trên GUI, các chức năng được thực thi dựa trên các hành động do người dùng thực hiện, như di chuột qua một phần tử hoặc nhấp vào nút. Những hành động này được gọi 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 biến cố-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 hàm trăn (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.

Sau đó, cú pháp cơ bản để kích hoạt chức năng vị trí để phản hồi tín hiệu từ một sự kiện như sau

 widget.signal.connect(slot)

Điều đó 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 đó, điều quan trọng là phải có cái nhìn cấp cao về cấu trúc của PyQt5. 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

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.

  • Qt: Nó 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. Nó làm tăng đáng kể bộ nhớ được sử dụng bởi ứng dụng. Tuy nhiên, việc quản lý khung sẽ dễ dàng hơn bằng cách chỉ nhập một mô-đun.
  • 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.
  • QtWidget: Chứ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ện cung 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à trường nhập liệu có nút chọn, tương tự như 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 ở đầu cửa sổ. Bạn chỉ có thể thêm các đối tượng của lớp QMenu vào thanh này. Các đối tượng QMenu đó có thể chứa thêm các chuỗi, đố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.
  • QTab: nó được sử dụng để chia nhỏ nội dung của một cửa sổ thành nhiều trang có thể được truy cập thông qua các tab khác nhau ở đầu tiện ích. Nó bao gồm hai phần: thanh tab và trang tab.
  • QScrollBar: Nó được sử dụng để tạo các thanh cuộn cho phép người dùng cuộn lên xuống trong một cửa sổ. Nó bao gồm một thanh trượt có thể di chuyển, một rãnh trượt 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: Tiện ích dock là một cửa sổ phụ có hai thuộc tính:
  • Nó có thể được di chuyển trong cửa sổ chính và
  • Nó có thể được gắn bên ngoài cửa sổ chính đế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.

  1. QBoxBố trí
  2. 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.

QBoxBố 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")

    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í.

QBoxBố 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:

QGridLayout

Phương thức addWidget() Trong bố cục lưới có 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 hàng (mặc định = 0)
  • Col-span (mặc định=0)

Để hiểu rõ hơn bạn có thể chèn thủ công 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:

QGridLayout

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.

QGridLayout

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 chủ đề của ứng dụng từ mặc định sang Fusion

app.setStyle("Fusion")

Đây là giao diện của ví dụ trước trong Fusion Theme

chủ đề

Một chức năng hữu ích khác để tạo chủ đề cho ứng dụng của bạn là phương thức setPalette(). Đây là mã để thay đổi màu của các vật dụng khác nhau bằ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ả.

chủ đề

Để 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 về mô-đun QtGui và bạn sẽ cần nhập nó để nó hoạt động. Khi bạn đã tạo đối tượng QPalette, hãy sử dụng phương thức setColor() để chuyển tên của tiện ích có màu bạn muốn thay đổi và màu bạn muốn đặt.

 qp.setColor(QPalette.Window, Qt.black)

Điều này sẽ thay đổi màu của cửa sổ thành màu đen. Sau khi bạn đã xác định bảng màu của mình, 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.

Tổng kết

  • PyQt là ràng buộc python cho C++ Khung giao diện người dùng, Qt.
  • PyQt4 và PyQt5 là hai phiên bản chính được phát triển bởi Riverbank Computing.
  • Các mô-đun chính của khung PyQt là:
    1. Qt
    2. QtCore
    3. QtWidget
    4. QtGui
    5. QtSql
    6. Mạng Qt
  • PyQt hỗ trợ nhiều widget khác nhau như:
    1. Buttons
    2. Nhãn văn bản
    3. Trường văn bản
    4. Nút radio và hộp kiểm
    5. Thanh công cụ và thanh Menu
    6. bộ web
    7. Các Nhãn (Tabs)
    8. Bến cảng
  • Trong PyQt, tính tương tác được triển khai bằng cách sử dụng tín hiệukhe.
  • An sự kiện là một hành động được thực hiện bởi người dùng trong GUI (như nhấp vào nút).
  • A tín hiệu được nâng lên bởi tiện ích tương ứng khi một sự kiện xảy ra trên đó.
  • A trò chơi Slot là một chức năng được kết nối với tín hiệu và thực thi khi tín hiệu được nâng lên.
  • PyQt có một công cụ bố cục mạnh mẽ và hỗ trợ quản lý và thiết kế bố cục nâng cao. Đây là hai sơ đồ bố cục được sử dụng thường xuyên trong PyQt:
    1. Box Bố trí
    2. Lưới Layout
  • Trình thiết kế PyQt cho phép bạn tạo các chủ đề tùy chỉnh cho ứng dụng GUI và có hỗ trợ sẵn cho các biểu định kiểu.
  • qtcreator Python có thể được sử dụng để tạo giao diện người dùng cũng như các ứng dụng độc lập.