Εκμάθηση PyQt5 με παραδείγματα: Δημιουργία Python Γραφικά περιβάλλοντα χρήστη με Qt

⚡ Έξυπνη Σύνοψη

PyQt is a Python binding for the cross-platform Qt widget toolkit, letting developers build native desktop GUIs. It wraps more than six hundred C++ classes covering windows, buttons, layouts, signals, slots, and themes for Windows, macOSκαι Linux.

  • 🔘 What is PyQt: A Python binding for the Qt C++ framework, maintained by Riverbank Computing.
  • ☑️ εκδόσεις: PyQt4 binds Qt 4.x and 5.x; PyQt5 targets only the Qt 5.x series.
  • Εγκατάσταση: The pip package manager installs PyQt5 from a wheel with a single command.
  • 🧪 First app: QApplication and QWidget create and display a basic window on screen.
  • Signals and slots: Widget events raise signals that connect to Python slot functions.
  • 🤖 Έτοιμο για Τεχνητή Νοημοσύνη: PyQt builds desktop front-ends that run and visualize machine learning models.

Εκμάθηση PyQt5

The sections below take you from PyQt basics through installation, core widgets, layouts, and themes with runnable examples.

Τι είναι το PyQt;

PyQt είναι ένα Python binding of the open-source widget-toolkit Qt, which also functions as a cross-platform application development framework. Qt is a popular C++ framework for writing GUI applications for all major desktop, mobile, and embedded platforms (it supports Linux, Windows, macOS, Android, iOS, Raspberry Pi και άλλα).

PyQt is free software developed and maintained by Riverbank Computing, a company based in England, whereas Qt is developed by a Finnish firm called The Qt Company.

Features of PyQt

Ακολουθούν σημαντικά χαρακτηριστικά του PyQt:

PyQt consists of more than six hundred classes covering a range of features such as:

  • Γραφικά περιβάλλοντα χρήστη
  • SQL βάσεις δεδομένων
  • Πακέτα εργαλείων Ιστού
  • Επεξεργασία XML
  • Δικτύωση

These features can be combined to create advanced UIs as well as standalone applications. A lot of major companies across all industries use Qt. Some examples are LG, Mercedes, AMD, Panasonic, and Harman.

Εκδόσεις PyQt

PyQt is available in two editions, PyQt4 and PyQt5. PyQt4 provides glue code for binding 4.x and 5.x versions of the Qt framework while PyQt5 provides a binding for only the 5.x versions. As a result, PyQt5 is not backward compatible with the deprecated modules of the older version. In this PyQt GUI tutorial, PyQt5 will be used for the demonstration of examples. Apart from these two versions, Riverbank Computing also provides PyQt3D—the Python bindings for the Qt3D framework. Qt3D is an application framework used to create real-time simulation systems with 2D/3D rendering.

Πώς να εγκαταστήσετε το PyQt5

Σε αυτό το σεμινάριο PyQt5, θα δούμε τους δύο τρόπους εγκατάστασης του PyQt:

  • Χρήση αρχείων τροχού
  • Κατασκευή και εγκατάσταση από την πηγή

Το Qt (προφέρεται χαριτωμένο) είναι ένα σύνθετο σύστημα και η βάση κώδικα PyQt περιέχει μεταγλωττισμένα C++ και Python code under the hood. As a result, it is a complicated process to build and install it from the source compared to other Python libraries. However, you can easily install PyQt5 using wheels.

Τοποθέτηση με ρόδες

Οι τροχοί είναι το νέο πρότυπο Python μορφή συσκευασίας και διανομής. Με απλά λόγια, ένας τροχός είναι ένα αρχείο ZIP με ειδικό όνομα και .whl επέκταση αρχείου. Οι τροχοί μπορούν να εγκατασταθούν χρησιμοποιώντας pip (Python's package manager), το οποίο περιλαμβάνεται από προεπιλογή στις πρόσφατες εκδόσεις του Python.

Έτσι, αν έχετε Python 3.4 ή νεότερη εγκατάσταση, έχετε ήδη pip. Εάν, ωστόσο, χρησιμοποιείτε μια παλαιότερη έκδοση του Python, you must download and install pip before going forward. You can search for instructions at this link: https://pypi.org/project/pip/.

To install PyQt5:

Βήμα 1) Ανοίξτε τη γραμμή εντολών.
Ανοίξτε τη γραμμή εντολών ή το PowerShell στο δικό σας Windows μηχανή.

εγκαταστήστε το PyQt5

Βήμα 2) Πληκτρολογήστε τα παρακάτω.

 pip install PyQt5

Βήμα 3) Επιτυχής εγκατάσταση.
Αυτό το βήμα σε αυτό το σεμινάριο PyQt5 θα κατεβάσει το πακέτο PyQt5 whl (περίπου 50 MB) και θα το εγκαταστήσει στο σύστημά σας.

εγκαταστήστε το PyQt5

Εναλλακτικά, μπορείτε επίσης να κατεβάσετε ένα Windows binary for the version of Python εγκατεστημένο στον υπολογιστή σας.

Μόλις ολοκληρωθεί, προχωρήστε στην επόμενη ενότητα σε αυτό το σεμινάριο PyQt5 για να γράψετε την πρώτη σας εφαρμογή GUI.

Βασικό PyQt Concepts και Προγράμματα

Now that you have successfully installed PyQt5 on your computer, you are ready to write Python GUI applications.

Let us start with a simple app in this PyQt5 tutorial which will display an empty window on your screen.

Fire up your Python IDLE και πληκτρολογήστε τα εξής:

Πρόγραμμα 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_())

Αποθηκεύστε το ως app.py (το όνομα δεν έχει σημασία) και πατήστε F5 για να εκτελέσετε το πρόγραμμα. Εναλλακτικά, απλώς κάντε διπλό κλικ στο αποθηκευμένο αρχείο για να εκκινήσετε την εφαρμογή. Εάν έχετε κάνει τα πάντα σωστά, θα ανοίξει ένα νέο παράθυρο με τον τίτλο Guru99 όπως φαίνεται παρακάτω.

Βασικό PyQt Concepts

Great! It is working. It is not much, but it is enough to grasp the basics. Now in this PyQt tutorial, let us see in detail what each of the lines in your program does.

from PyQt5.QtWidgets import QApplication, QWidget

Αυτή η δήλωση εισάγει όλα τα modules που χρειάζεστε για να δημιουργήσετε ένα GUI στον τρέχοντα χώρο ονομάτων. Η ενότητα QtWidgets περιέχει όλα τα κύρια γραφικά στοιχεία που θα χρησιμοποιήσετε σε αυτό Python Εκμάθηση Qt.

app = QApplication(sys.argv)

Εδώ, δημιουργείτε ένα αντικείμενο της κλάσης QApplication. Αυτό το βήμα είναι απαραίτητο για το PyQt5. κάθε εφαρμογή διεπαφής χρήστη πρέπει να δημιουργεί μια παρουσία του QApplication, ως ένα είδος σημείου εισόδου στην εφαρμογή. Εάν δεν το δημιουργήσετε, θα εμφανιστούν σφάλματα.

Το sys.argv είναι η λίστα των παραμέτρων της γραμμής εντολών που μπορείτε να μεταβιβάσετε στην εφαρμογή κατά την εκκίνηση μέσω του κελύφους ή κατά την αυτοματοποίηση της διεπαφής.

In this PyQt5 example, you did not pass any arguments to QApplication. Therefore, you can also replace it with the code below and not even have to import the sys module.

app = QApplication([])
w = QWidget()

Στη συνέχεια, φτιάχνουμε ένα αντικείμενο της κλάσης QWidget. Το QWidget είναι η βασική κλάση όλων των αντικειμένων διεπαφής χρήστη στο Qt και σχεδόν όλα όσα βλέπετε σε μια εφαρμογή είναι ένα γραφικό στοιχείο. Αυτό περιλαμβάνει διαλόγους, κείμενα, κουμπιά, γραμμές και ούτω καθεξής. Το χαρακτηριστικό που σας επιτρέπει να σχεδιάζετε σύνθετες διεπαφές χρήστη είναι ότι τα γραφικά στοιχεία μπορούν να είναι ένθετα, δηλαδή, μπορείτε να έχετε ένα γραφικό στοιχείο μέσα σε ένα γραφικό στοιχείο, το οποίο βρίσκεται μέσα σε ένα ακόμη γραφικό στοιχείο. Θα το δείτε σε δράση στην επόμενη ενότητα.

w.resize(300,300)

Η μέθοδος αλλαγής μεγέθους της κλάσης QWidget σάς επιτρέπει να ορίσετε τις διαστάσεις οποιουδήποτε γραφικού στοιχείου. Σε αυτήν την περίπτωση, έχετε αλλάξει το μέγεθος του παραθύρου σε 300px επί 300px.

Here, you should remember that widgets could be nested together; the outermost widget (i.e., the widget with no parent) is called a Window.

w.setWindowTitle("Guru99")

Η μέθοδος setWindowTitle() σάς επιτρέπει να περάσετε μια συμβολοσειρά ως όρισμα που θα ορίσει τον τίτλο του παραθύρου στη συμβολοσειρά που περνείτε. Στο παράδειγμα PyQt5, θα εμφανιστεί η γραμμή τίτλου Guru99.

w.show()

Η show() απλώς εμφανίζει το widget στην οθόνη της οθόνης.

sys.exit(app.exec_())

Η μέθοδος app.exec_() ξεκινά το Qt/C++ βρόχος συμβάντος. Όπως γνωρίζετε, το PyQt είναι σε μεγάλο βαθμό γραμμένο C++ and uses the event loop mechanism to implement parallel execution. app.exec_() passes the control over to Qt, which will exit the application only when the user closes it from the GUI. That is why ctrl+c will not exit the application as in other Python programs. Since Qt has control over the app, Python events are not processed unless we set them up inside the application. Also, note that the exec method has an underscore in its name; this is because exec() was already a keyword in Python and the underscore resolves the naming conflict.

Πέρα από άδεια παράθυρα

In the previous section, you saw how to make a basic widget in Qt. It is now time to make some more involved interfaces with which the users can truly interact. Again, fire up your IDLE και γράψε τα παρακάτω.

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_())

Save the file as appone.py or anything you like and press F5 to run the program. If you have not made any mistakes, the IDLE θα ανοίξει ένα νέο παράθυρο με λίγο κείμενο και ένα κουμπί όπως φαίνεται παρακάτω.

Πέρα από άδεια Windows

  1. Μόλις κάνετε κλικ στο κουμπί στο πρώτο παράθυρο, θα ανοίξει ένα νέο πλαίσιο μηνύματος με το κείμενο που είχατε γράψει.
  2. Τώρα μπορείτε να κάνετε κλικ στο κουμπί Απόκρυψη λεπτομερειών/Εμφάνιση λεπτομερειών για να αλλάξετε την ορατότητα του πρόσθετου κειμένου.

As you can see, since we had not set any window title in the message box, a default title was provided by Python Itself.

Now that it is working, let us take a look at the extra code that you have added to the previous PyQt5 example.

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

Αυτό εισάγει μερικά ακόμη γραφικά στοιχεία που έχετε χρησιμοποιήσει σε παραδείγματα PyQt5, συγκεκριμένα 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_()

Εδώ, έχετε ορίσει μια μέθοδο με το όνομα διαλόγου που δημιουργεί ένα γραφικό στοιχείο πλαισίου μηνύματος και ορίζει κάποιο κείμενο στα κουμπιά και σε άλλα πεδία.

Η μέθοδος διαλόγου καλείται από το κύριο μπλοκ του προγράμματος όταν πατηθεί ένα κουμπί σε ένα συγκεκριμένο widget (σε αυτήν την περίπτωση, το btn PushButton). Το συμβάν κλικ που ενεργοποιείται σε αυτό το κουμπί προκαλεί την εκτέλεση αυτής της λειτουργίας. Μια τέτοια λειτουργία ονομάζεται υποδοχή σε Qt και θα μάθετε περισσότερα σήματα και κουλοχέρηδες στις επόμενες παραγράφους.

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")

This is the main section of the app and, as in the previous example, you start by creating an instance of QApplication followed by a simple widget, i.e. an instance of QWidget.

label = QLabel(w)
    btn = QPushButton(w)

Έχετε προσθέσει δύο νέα γραφικά στοιχεία σε αυτήν την εφαρμογή: QLabel και QPushButton. Το QLabel χρησιμοποιείται για την εκτύπωση μη επεξεργάσιμου κειμένου ή κράτησης θέσης μέσα σε ένα γραφικό στοιχείο, ενώ το QPushButton χρησιμοποιείται για τη δημιουργία ενός κουμπιού με δυνατότητα κλικ.

Το κρίσιμο πράγμα που πρέπει να προσέξετε εδώ είναι ότι όταν δημιουργείτε την ετικέτα και τα αντικείμενα btn, περνάτε το αντικείμενο παραθύρου (w) στους κατασκευαστές των QLabel και QPushButton. Έτσι λειτουργεί η ένθεση στο PyQt5. Για να δημιουργήσετε ένα γραφικό στοιχείο μέσα σε ένα άλλο γραφικό στοιχείο, μεταβιβάζετε την αναφορά του γονικού γραφικού στοιχείου στον κατασκευαστή του παιδιού.

label.move(100,130)
btn.move(110,150)

Το move() χρησιμοποιείται για να ορίσετε τη θέση ενός γραφικού στοιχείου σε σχέση με το γονικό του γραφικό στοιχείο. Στην πρώτη περίπτωση, η ετικέτα θα μετακινηθεί 100 εικονοστοιχεία από τα αριστερά και 130 εικονοστοιχεία από την κορυφή του παραθύρου.

Ομοίως, το κουμπί θα τοποθετηθεί 110 εικονοστοιχεία από τα αριστερά και 150 εικονοστοιχεία από την κορυφή του παραθύρου. Αυτό το παράδειγμα είναι ένας ακατέργαστος τρόπος επίτευξης διατάξεων και γενικά δεν χρησιμοποιείται στην παραγωγή. περιλαμβάνεται εδώ μόνο για εκπαιδευτικούς σκοπούς. Το Qt υποστηρίζει διαφορετικές διατάξεις που θα δείτε λεπτομερώς στις επόμενες ενότητες αυτού του σεμιναρίου PyQt.

btn.clicked.connect(dialog)

Finally, this is an example of signals and slots in Qt. In GUI-based applications, functions are executed based on the actions performed by the user, like hovering over an element or clicking a button. These actions are called εκδηλώσεις. Θυμηθείτε ότι η μέθοδος app.exec_() μεταφέρει τον έλεγχο στο Qt συμβάν βρόχος. Αυτός είναι ο σκοπός του βρόχου συμβάντων: για ακρόαση συμβάντων και εκτέλεση ενεργειών ως απόκριση.

Κάθε φορά που συμβαίνει ένα συμβάν, όπως ένας χρήστης που κάνει κλικ σε ένα κουμπί, το αντίστοιχο γραφικό στοιχείο Qt ανεβάζει a σήμα. Αυτά τα σήματα μπορούν να συνδεθούν με Python λειτουργίες (όπως η συνάρτηση διαλόγου σε αυτό το παράδειγμα) έτσι ώστε η συνάρτηση να εκτελείται όταν ενεργοποιείται ένα σήμα. Αυτές οι συναρτήσεις καλούνται κουλοχέρηδες σε Qt lingo.

Subsequently, the basic syntax to trigger a slot function in response to the signal from an event is as follows:

 widget.signal.connect(slot)

This means that whenever a σήμα πυροδοτείται από α widget, το συνδεδεμένο θυρίδα θα εκτελεστεί η λειτουργία. Συνοπτικά, τα σήματα και οι υποδοχές χρησιμοποιούνται από το Qt για να επικοινωνούν μεταξύ των αντικειμένων και να διευκολύνουν την επαναχρησιμοποίηση και τη διαδραστικότητα των στοιχείων.

Τώρα που ξέρετε πώς να τοποθετείτε γραφικά στοιχεία και να εφαρμόζετε αλληλεπιδράσεις χρησιμοποιώντας σήματα και υποδοχές, ακολουθεί μια λίστα με χρήσιμα γραφικά στοιχεία και άλλες κλάσεις που μπορείτε να χρησιμοποιήσετε στις εφαρμογές σας PyQt.

Στοιχεία και γραφικά στοιχεία

Υπάρχει ένας μεγάλος αριθμός γραφικών στοιχείων διαθέσιμα στο PyQt για τη δημιουργία εφαρμογών GUI. Ωστόσο, με το PyQt5, υπήρξε ανακατανομή των τάξεων σε διαφορετικές ενότητες και αναθεωρήσεις στις άδειες.

Therefore, it is crucial to have a high-level view of the structure of PyQt5. In this section, you will see how PyQt5 is organized internally and learn about the different modules, libraries, and API classes provided by PyQt5.

Δομή καταλόγου PyQt5

Δομή καταλόγου PyQt5

Αυτές είναι οι βασικές ενότητες που χρησιμοποιούνται από PythonΣύνδεση Qt, συγκεκριμένα το PyQt5.

  • Qt: It combines all the classes/modules mentioned below into a single module. It considerably increases the memory used by the application. However, it is easier to manage the framework by only importing one module.
  • QtCore: Περιέχει τις βασικές μη γραφικές κλάσεις που χρησιμοποιούνται από άλλες ενότητες. Εδώ υλοποιούνται ο βρόχος συμβάντων Qt, τα σήματα και η συνδεσιμότητα υποδοχής κ.λπ.
  • QtWidgets: Contains most of the widgets available in PyQt5.
  • QtGui: Περιέχει στοιχεία GUI και επεκτείνει τη μονάδα QtCore.
  • QtNetwork: Περιέχει κλάσεις που χρησιμοποιούνται για την υλοποίηση προγραμματισμού δικτύου μέσω του Qt. Υποστηρίζει διακομιστές TCP, υποδοχές TCP, υποδοχές UDP, χειρισμό SSL, συνεδρίες δικτύου και αναζητήσεις DNS.
  • QtMultimedia: provides low-level multimedia functionality.
  • QtSql: υλοποιεί την ενοποίηση βάσεων δεδομένων για βάσεις δεδομένων SQL. Υποστηρίζει ODBC, MySQL, Oracle, SQLiteκαι PostgreSQL.

Γραφικά στοιχεία PyQt5

Here is a list of the most frequently used widgets in PyQt5:

  • QLineEdit: Αυτό είναι ένα πεδίο εισαγωγής που επιτρέπει την εισαγωγή μιας γραμμής κειμένου από τον χρήστη.
line = QLineEdit()
  • Κουμπί QRadio: This is an input field with a selectable button, similar to the radio buttons in HTML.
rad = QRadioButton("button title")
rad.setChecked(True)  #to select the button by default.
  • QComboBox: Χρησιμοποιείται για την εμφάνιση ενός αναπτυσσόμενου μενού με μια λίστα με επιλεγμένα στοιχεία.
drop = QComboBox(w)
drop.addItems(["item one", "item two", "item three"])
  • QCheckBox: Εμφανίζει ένα επιλέξιμο τετράγωνο πλαίσιο μπροστά από την ετικέτα που σημειώνεται εάν είναι επιλεγμένο, παρόμοιο με τα κουμπιά επιλογής.
check = QCheckBox("button title")
  • QMenuBar: It displays a horizontal menu bar at the top of a window. You can only add objects of the QMenu class to this bar. Those QMenu objects can further contain strings, QAction objects or other QMenu objects.
  • QToolBar: Είναι μια οριζόντια γραμμή ή παράθυρο που μπορεί να μετακινηθεί μέσα στο παράθυρο. Μπορεί να περιέχει κουμπιά και άλλα γραφικά στοιχεία.
  • QTab: It is used to break down the contents of a window into multiple pages that can be accessed through different tabs on top of the widget. It consists of two sections: the tab bar and the tab page.
  • QScrollBarΧρησιμοποιείται για τη δημιουργία γραμμών κύλισης που επιτρέπουν στον χρήστη να κάνει κύλιση προς τα πάνω και προς τα κάτω μέσα σε ένα παράθυρο. Αποτελείται από ένα κινητό ρυθμιστικό, ένα ρυθμιστικό track και δύο κουμπιά για κύλιση του ρυθμιστικού προς τα πάνω ή προς τα κάτω.
scroll = QScrollBar()
  • QSplitter: Οι διαχωριστές χρησιμοποιούνται για τον διαχωρισμό των περιεχομένων ενός παραθύρου, έτσι ώστε τα γραφικά στοιχεία να ομαδοποιούνται σωστά και να μην εμφανίζονται ακατάστατα. Το QSplitter είναι ένας από τους κύριους χειριστές διάταξης που είναι διαθέσιμοι στο PyQt5 και χρησιμοποιείται για τον διαχωρισμό του περιεχομένου τόσο οριζόντια όσο και κάθετα.
  • QDock: A dock widget is a sub-window with two properties: it can be moved within the main window, and it can be docked outside the parent window to another location on the screen.

Διατάξεις και θέματα

Στα προηγούμενα παραδείγματα PyQt5, χρησιμοποιούσατε μόνο τις μεθόδους move() και resize() για να ορίσετε τις θέσεις των γραφικών στοιχείων στο γραφικό περιβάλλον σας.

Ωστόσο, το PyQt διαθέτει μια ισχυρή μηχανή διαχείρισης διάταξης που μπορεί να χρησιμοποιηθεί για τη δημιουργία προηγμένων διεπαφών χρήστη για εφαρμογές. Σε αυτήν την ενότητα, θα μάθετε για δύο σημαντικές κλάσεις που χρησιμοποιούνται στο Qt για τη δημιουργία και τη διαχείριση διατάξεων.

  1. QBoxσχέδιο
  2. QGridLayout

QBoxσχέδιο

QBoxΗ διάταξη χρησιμοποιείται για την ευθυγράμμιση των θυγατρικών γραφικών στοιχείων της διάταξης σε οριζόντια ή κάθετη σειρά. Οι δύο κατηγορίες ενδιαφέροντος που κληρονομούν από το QBoxΗ διάταξη είναι:

  • QHBoxΔιάταξη: χρησιμοποιείται για την οριζόντια γραμμή των θυγατρικών γραφικών στοιχείων.
  • QVBoxΔιάταξη: χρησιμοποιείται για την κάθετη ευθυγράμμιση των θυγατρικών γραφικών στοιχείων.

Για παράδειγμα, έτσι ευθυγραμμίζονται τρία κουμπιά με το QHBoxΗ διάταξη θα φαίνεται.

QBoxσχέδιο

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_())

Και έτσι θα φαίνονται στο QVBoxΣχέδιο.

QBoxσχέδιο

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_())

Η μόνη συνάρτηση που χρειάζεται κάποια εξήγηση σε αυτό το σημείο είναι η μέθοδος addWidget(). Χρησιμοποιείται για την εισαγωγή γραφικών στοιχείων στο HBox ή VBox διάταξη. Χρησιμοποιείται επίσης σε άλλες διατάξεις όπου χρειάζεται διαφορετικός αριθμός παραμέτρων όπως θα δείτε στην επόμενη ενότητα. Τα γραφικά στοιχεία θα εμφανιστούν μέσα στη διάταξη με τη σειρά που τα εισάγετε.

QGridLayout

Το QGridLayout χρησιμοποιείται για τη δημιουργία διεπαφών στις οποίες τα γραφικά στοιχεία είναι τοποθετημένα με τη μορφή πλέγματος (όπως μήτρα ή πίνακας 2D). Για να εισαγάγετε στοιχεία σε μια διάταξη πλέγματος, μπορείτε να χρησιμοποιήσετε την αναπαράσταση πίνακα για να ορίσετε τον αριθμό των γραμμών και στηλών στο πλέγμα καθώς και τη θέση αυτών των στοιχείων.

Για παράδειγμα, για να δημιουργήσετε ένα πλέγμα 3*3 (δηλαδή, ένα πλέγμα με τρεις σειρές και τρεις στήλες), θα γράψετε τον ακόλουθο κώδικα:

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_())

Αυτή θα είναι η έξοδος:

QGridLayout

The addWidget() method in the grid layout takes these arguments:

  • Το αντικείμενο widget που θέλετε να προσθέσετε στο πλέγμα
  • Η συντεταγμένη x του αντικειμένου
  • Η συντεταγμένη y του αντικειμένου
  • The row-span (default = 0)
  • The col-span (default = 0)

To understand it better, you can manually insert each widget as shown below.

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_())

Έτσι θα μοιάζει το πλέγμα:

QGridLayout

Μπορείτε επίσης να μεταβιβάσετε τις παραμέτρους rowspan και colspan στην addWidget() προκειμένου να εκτείνονται περισσότερες από μία γραμμές ή στήλες.

Για παράδειγμα,

grid.addWidget(QPushButton("Button five"),2,0,1,0)

Αυτό θα δημιουργήσει ένα κουμπί που εκτείνεται και στις δύο στήλες.

QGridLayout

θέματα

Το PyQt5 συνοδεύεται από μερικά ενσωματωμένα θέματα που μπορείτε να χρησιμοποιήσετε στις εφαρμογές σας. ο setStyle() Η μέθοδος που καλείται στην παρουσία QApplication χρησιμοποιείται για να ορίσετε ένα συγκεκριμένο θέμα στην εφαρμογή σας.

For example, adding the following line of code will change the theme of your application from default to Fusion.

app.setStyle("Fusion")

This is how the previous example will look in the Fusion Theme.

θέματα

Another useful function for theming your apps is the setPalette() method. Here is the code for changing the color of different widgets using 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_())

Εδώ είναι το αποτέλεσμα.

θέματα

Για να χρησιμοποιήσετε τη μέθοδο setPalette(), πρέπει πρώτα να ορίσετε μια παλέτα. Αυτό γίνεται δημιουργώντας ένα αντικείμενο της κλάσης QPalette.

 qp = QPalette()

Notice that the QPalette class belongs to the QtGui module and you will need to import it for this to work. Once you have created the QPalette object, use the setColor() method to pass the name of a widget whose color you want to change and the color you want to be set.

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

This will change the color of the window to black. After you have defined your color scheme, use the setPalette() function to apply the palette to your application.

app.setPalette(qp)

Αυτό είναι το μόνο που χρειάζεται να κάνετε εάν θέλετε να δημιουργήσετε μερικά βασικά θέματα για την εφαρμογή σας. Το PyQt σάς επιτρέπει επίσης να χρησιμοποιείτε φύλλα στυλ για να καθορίσετε την εμφάνιση των γραφικών στοιχείων σας. Εάν είστε εξοικειωμένοι με το CSS, μπορείτε εύκολα να ορίσετε προηγμένα στυλ για την εφαρμογή σας χρησιμοποιώντας Φύλλα στυλ Qt.

Συχνές Ερωτήσεις

Tkinter ships with Python and suits small, simple tools. PyQt offers far more widgets, a visual designer, and a native look, making it better for large, professional desktop applications — at the cost of a steeper learning curve and GPL licensing.

Both bind the same Qt libraries and share almost identical APIs. The key difference is licensing: PyQt uses GPL or a paid commercial license, while PySide (Qt for Python) uses the LGPL, allowing closed-source distribution for free.

Qt Designer is a drag-and-drop tool that saves your layout as an XML .ui file. Convert it to Python with the pyuic5 utility, or load it at runtime using uic.loadUi().

PyQt6 binds the newer Qt 6 framework and requires fully scoped enums, such as Qt.AlignmentFlag.AlignLeft. PyQt5 targets Qt 5 and remains the most widely used version. PyQt6 also drops some deprecated modules and adds better high-DPI support.

Use PyInstaller: run pyinstaller –onefile –windowed app.py to bundle your script, PyQt5, and the Qt libraries into a single executable. The –windowed flag hides the console. fbs and cx_Freeze are popular alternatives.

PyQt5 is beginner-friendly if you know basic Python. Understanding classes, objects, and the signals-and-slots pattern helps most. Qt Designer lets you build layouts visually, so you can create working windows before mastering every widget by hand.

PyQt builds desktop front-ends for machine learning models — dashboards that load data, trigger training or inference, and display predictions, charts, or images. It pairs well with NumPy, pandas, and Matplotlib, wrapping a trained model in a friendly GUI.

Yes. GitHub Copilot autocompletes common PyQt5 patterns like QApplication setup, widget creation, and signal-slot connections from a comment or function name. Always run the generated window to confirm layouts and event handlers behave as intended.

Συνοψίστε αυτήν την ανάρτηση με: