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

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

Το PyQt είναι ένα Python σύνδεση για το κιτ εργαλείων widget Qt για πολλαπλές πλατφόρμες, επιτρέποντας στους προγραμματιστές να δημιουργούν εγγενή γραφικά περιβάλλοντα χρήστη για υπολογιστές. Περιλαμβάνει περισσότερα από εξακόσια C++ μαθήματα που καλύπτουν παράθυρα, κουμπιά, διατάξεις, σήματα, υποδοχές και θέματα για Windows, macOSκαι Linux.

  • 🔘 Τι είναι το PyQt: A Python σύνδεση για το Qt C++ πλαίσιο, το οποίο συντηρείται από την Riverbank Computing.
  • ☑️ εκδόσεις: Το PyQt4 συνδέεται με τα Qt 4.x και 5.x. Το PyQt5 στοχεύει μόνο τη σειρά Qt 5.x.
  • Εγκατάσταση: Ο διαχειριστής πακέτων pip εγκαθιστά το PyQt5 από έναν τροχό με μία μόνο εντολή.
  • 🧪 Πρώτη εφαρμογή: Τα QApplication και QWidget δημιουργούν και εμφανίζουν ένα βασικό παράθυρο στην οθόνη.
  • Signals και υποδοχές: Τα συμβάντα του widget δημιουργούν σήματα που συνδέονται με Python λειτουργίες υποδοχής.
  • 🤖 Έτοιμο για Τεχνητή Νοημοσύνη: Το PyQt δημιουργεί front-end για υπολογιστές που εκτελούν και απεικονίζουν μοντέλα μηχανικής μάθησης.

Εκμάθηση PyQt5

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

Τι είναι το PyQt;

PyQt είναι ένα Python σύνδεση του Qt widget-toolkit ανοιχτού κώδικα, το οποίο λειτουργεί επίσης ως πλαίσιο ανάπτυξης εφαρμογών σε πολλαπλές πλατφόρμες. Το Qt είναι ένα δημοφιλές C++ πλαίσιο για τη σύνταξη εφαρμογών GUI για όλες τις μεγάλες πλατφόρμες για υπολογιστές, κινητά και ενσωματωμένες πλατφόρμες (υποστηρίζει Linux, Windows, macOS, Android, iOS, Raspberry Pi και άλλα).

Το PyQt είναι ελεύθερο λογισμικό που αναπτύχθηκε και συντηρείται από την Riverbank Computing, μια εταιρεία με έδρα την Αγγλία, ενώ το Qt αναπτύχθηκε από μια φινλανδική εταιρεία που ονομάζεται The Qt Company.

Χαρακτηριστικά του PyQt

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

Το PyQt αποτελείται από περισσότερες από εξακόσιες κλάσεις που καλύπτουν μια σειρά από χαρακτηριστικά όπως:

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

Αυτά τα χαρακτηριστικά μπορούν να συνδυαστούν για τη δημιουργία προηγμένων UI καθώς και αυτόνομων εφαρμογών. Πολλές μεγάλες εταιρείες σε όλους τους κλάδους χρησιμοποιούν το Qt. Μερικά παραδείγματα είναι οι LG, Mercedes, AMD, Panasonic και Harman.

Εκδόσεις PyQt

Το PyQt διατίθεται σε δύο εκδόσεις, PyQt4 και PyQt5. Το PyQt4 παρέχει κώδικα συγκόλλησης για τη σύνδεση των εκδόσεων 4.x και 5.x του πλαισίου Qt, ενώ το PyQt5 παρέχει σύνδεση μόνο για τις εκδόσεις 5.x. Ως αποτέλεσμα, το PyQt5 δεν είναι συμβατό με τις παλαιότερες εκδόσεις που έχουν απαρχαιωθεί. Σε αυτό το σεμινάριο GUI του PyQt, το PyQt5 θα χρησιμοποιηθεί για την επίδειξη παραδειγμάτων. Εκτός από αυτές τις δύο εκδόσεις, το Riverbank Computing παρέχει επίσης PyQt3D—το Python συνδέσεις για το πλαίσιο Qt3D. Το Qt3D είναι ένα πλαίσιο εφαρμογής που χρησιμοποιείται για τη δημιουργία συστημάτων προσομοίωσης πραγματικού χρόνου με απόδοση 2D/3D.

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

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

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

Το Qt (προφέρεται χαριτωμένο) είναι ένα σύνθετο σύστημα και η βάση κώδικα PyQt περιέχει μεταγλωττισμένα C++ και Python κώδικα κάτω από την κουκούλα. Ως αποτέλεσμα, είναι μια περίπλοκη διαδικασία για να το δημιουργήσετε και να το εγκαταστήσετε από τον πηγαίο κώδικα σε σύγκριση με άλλα Python βιβλιοθήκες. Ωστόσο, μπορείτε εύκολα να εγκαταστήσετε το PyQt5 χρησιμοποιώντας τροχούς.

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

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

Έτσι, αν έχετε Python 3.4 ή νεότερη εγκατάσταση, έχετε ήδη pip. Εάν, ωστόσο, χρησιμοποιείτε μια παλαιότερη έκδοση του Python, πρέπει να κατεβάσετε και να εγκαταστήσετε το pip πριν προχωρήσετε. Μπορείτε να αναζητήσετε οδηγίες σε αυτόν τον σύνδεσμο: https://pypi.org/project/pip/.

Για να εγκαταστήσετε το PyQt5:

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

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

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

 pip install PyQt5

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

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

Εναλλακτικά, μπορείτε επίσης να κατεβάσετε ένα Windows δυαδικό αρχείο για την έκδοση του Python εγκατεστημένο στον υπολογιστή σας.

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

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

Τώρα που εγκαταστήσατε με επιτυχία το PyQt5 στον υπολογιστή σας, είστε έτοιμοι να γράψετε Python Εφαρμογές GUI.

Ας ξεκινήσουμε με μια απλή εφαρμογή σε αυτό το σεμινάριο PyQt5 η οποία θα εμφανίσει ένα κενό παράθυρο στην οθόνη σας.

Άναψε το δικό σου 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

Τέλεια! Λειτουργεί. Δεν είναι πολύ, αλλά είναι αρκετό για να κατανοήσετε τα βασικά. Τώρα, σε αυτό το σεμινάριο PyQt, ας δούμε λεπτομερώς τι κάνει κάθε γραμμή στο πρόγραμμά σας.

from PyQt5.QtWidgets import QApplication, QWidget

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

app = QApplication(sys.argv)

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

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

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

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

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

w.resize(300,300)

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

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

w.setWindowTitle("Guru99")

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

w.show()

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

sys.exit(app.exec_())

Η μέθοδος app.exec_() ξεκινά το Qt/C++ βρόχος συμβάντος. Όπως γνωρίζετε, το PyQt είναι σε μεγάλο βαθμό γραμμένο C++ και χρησιμοποιεί τον μηχανισμό βρόχου συμβάντων για την υλοποίηση παράλληλης εκτέλεσης. Η app.exec_() μεταβιβάζει τον έλεγχο στο Qt, το οποίο θα τερματίσει την εφαρμογή μόνο όταν ο χρήστης την κλείσει από το GUI. Αυτός είναι ο λόγος για τον οποίο το ctrl+c δεν θα τερματίσει την εφαρμογή όπως σε άλλες περιπτώσεις. Python προγράμματα. Δεδομένου ότι το Qt έχει τον έλεγχο της εφαρμογής, Python Τα συμβάντα δεν υποβάλλονται σε επεξεργασία εκτός αν τα ορίσουμε μέσα στην εφαρμογή. Επίσης, σημειώστε ότι η μέθοδος exec έχει μια υπογράμμιση στο όνομά της. Αυτό συμβαίνει επειδή η exec() ήταν ήδη μια λέξη-κλειδί στο Python και η υπογράμμιση επιλύει τη διένεξη ονομασίας.

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

Στην προηγούμενη ενότητα, είδατε πώς να δημιουργήσετε ένα βασικό γραφικό στοιχείο στο Qt. Τώρα είναι η ώρα να δημιουργήσετε μερικές πιο περίπλοκες διεπαφές με τις οποίες οι χρήστες μπορούν πραγματικά να αλληλεπιδρούν. Ξανά, ενεργοποιήστε το 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_())

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

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

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

Όπως μπορείτε να δείτε, επειδή δεν είχαμε ορίσει κανέναν τίτλο παραθύρου στο πλαίσιο μηνύματος, ένας προεπιλεγμένος τίτλος παρείχε η Python Itself.

Τώρα που λειτουργεί, ας ρίξουμε μια ματιά στον επιπλέον κώδικα που έχετε προσθέσει στο προηγούμενο παράδειγμα PyQt5.

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

Αυτή είναι η κύρια ενότητα της εφαρμογής και, όπως και στο προηγούμενο παράδειγμα, ξεκινάτε δημιουργώντας μια παρουσία του QApplication ακολουθούμενη από ένα απλό γραφικό στοιχείο, δηλαδή μια παρουσία του 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)

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

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

Στη συνέχεια, η βασική σύνταξη για την ενεργοποίηση μιας συνάρτησης slot ως απόκριση στο σήμα από ένα συμβάν έχει ως εξής:

 widget.signal.connect(slot)

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

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

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

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

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

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

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

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

  • QtΣυνδυάζει όλες τις κλάσεις/μονάδες που αναφέρονται παρακάτω σε μία μόνο μονάδα. Αυξάνει σημαντικά τη μνήμη που χρησιμοποιείται από την εφαρμογή. Ωστόσο, είναι ευκολότερη η διαχείριση του πλαισίου εισάγοντας μόνο μία μονάδα.
  • QtCore: Περιέχει τις βασικές μη γραφικές κλάσεις που χρησιμοποιούνται από άλλες ενότητες. Εδώ υλοποιούνται ο βρόχος συμβάντων Qt, τα σήματα και η συνδεσιμότητα υποδοχής κ.λπ.
  • QtWidgetsΠεριέχει τα περισσότερα από τα widgets που είναι διαθέσιμα στο PyQt5.
  • QtGui: Περιέχει στοιχεία GUI και επεκτείνει τη μονάδα QtCore.
  • QtNetwork: Περιέχει κλάσεις που χρησιμοποιούνται για την υλοποίηση προγραμματισμού δικτύου μέσω του Qt. Υποστηρίζει διακομιστές TCP, υποδοχές TCP, υποδοχές UDP, χειρισμό SSL, συνεδρίες δικτύου και αναζητήσεις DNS.
  • QtMultimedia: παρέχει λειτουργικότητα πολυμέσων χαμηλού επιπέδου.
  • QtSql: υλοποιεί την ενοποίηση βάσεων δεδομένων για βάσεις δεδομένων SQL. Υποστηρίζει ODBC, MySQL, Oracle, SQLiteκαι PostgreSQL.

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

Ακολουθεί μια λίστα με τα πιο συχνά χρησιμοποιούμενα γραφικά στοιχεία στο PyQt5:

  • QLineEdit: Αυτό είναι ένα πεδίο εισαγωγής που επιτρέπει την εισαγωγή μιας γραμμής κειμένου από τον χρήστη.
line = QLineEdit()
  • Κουμπί QRadio: Αυτό είναι ένα πεδίο εισαγωγής με ένα επιλέξιμο κουμπί, παρόμοιο με τα κουμπιά επιλογής στην 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Εμφανίζει μια οριζόντια γραμμή μενού στο επάνω μέρος ενός παραθύρου. Μπορείτε να προσθέσετε μόνο αντικείμενα της κλάσης QMenu σε αυτήν τη γραμμή. Αυτά τα αντικείμενα QMenu μπορούν επιπλέον να περιέχουν συμβολοσειρές, αντικείμενα QAction ή άλλα αντικείμενα QMenu.
  • QToolBar: Είναι μια οριζόντια γραμμή ή παράθυρο που μπορεί να μετακινηθεί μέσα στο παράθυρο. Μπορεί να περιέχει κουμπιά και άλλα γραφικά στοιχεία.
  • QTabΧρησιμοποιείται για την ανάλυση του περιεχομένου ενός παραθύρου σε πολλές σελίδες, στις οποίες μπορείτε να αποκτήσετε πρόσβαση μέσω διαφορετικών καρτελών στο επάνω μέρος του γραφικού στοιχείου. Αποτελείται από δύο ενότητες: τη γραμμή καρτελών και τη σελίδα καρτελών.
  • QScrollBarΧρησιμοποιείται για τη δημιουργία γραμμών κύλισης που επιτρέπουν στον χρήστη να κάνει κύλιση προς τα πάνω και προς τα κάτω μέσα σε ένα παράθυρο. Αποτελείται από ένα κινητό ρυθμιστικό, ένα ρυθμιστικό track και δύο κουμπιά για κύλιση του ρυθμιστικού προς τα πάνω ή προς τα κάτω.
scroll = QScrollBar()
  • QSplitter: Οι διαχωριστές χρησιμοποιούνται για τον διαχωρισμό των περιεχομένων ενός παραθύρου, έτσι ώστε τα γραφικά στοιχεία να ομαδοποιούνται σωστά και να μην εμφανίζονται ακατάστατα. Το QSplitter είναι ένας από τους κύριους χειριστές διάταξης που είναι διαθέσιμοι στο PyQt5 και χρησιμοποιείται για τον διαχωρισμό του περιεχομένου τόσο οριζόντια όσο και κάθετα.
  • QDockΈνα γραφικό στοιχείο σύνδεσης είναι ένα δευτερεύον παράθυρο με δύο ιδιότητες: μπορεί να μετακινηθεί μέσα στο κύριο παράθυρο και μπορεί να συνδεθεί έξω από το γονικό παράθυρο σε άλλη θέση στην οθόνη.

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

Στα προηγούμενα παραδείγματα 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

Η μέθοδος addWidget() στη διάταξη πλέγματος δέχεται αυτά τα ορίσματα:

  • Το αντικείμενο widget που θέλετε να προσθέσετε στο πλέγμα
  • Η συντεταγμένη x του αντικειμένου
  • Η συντεταγμένη y του αντικειμένου
  • Το εύρος γραμμών (προεπιλογή = 0)
  • Το εύρος των στηλών (προεπιλογή = 0)

Για να το κατανοήσετε καλύτερα, μπορείτε να εισαγάγετε χειροκίνητα κάθε γραφικό στοιχείο όπως φαίνεται παρακάτω.

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 χρησιμοποιείται για να ορίσετε ένα συγκεκριμένο θέμα στην εφαρμογή σας.

Για παράδειγμα, η προσθήκη της ακόλουθης γραμμής κώδικα θα αλλάξει το θέμα της εφαρμογής σας από προεπιλεγμένο σε Fusion.

app.setStyle("Fusion")

Έτσι θα φαίνεται το προηγούμενο παράδειγμα στο θέμα Fusion.

θέματα

Μια άλλη χρήσιμη συνάρτηση για τη δημιουργία θέματος στις εφαρμογές σας είναι η μέθοδος setPalette(). Ακολουθεί ο κώδικας για την αλλαγή του χρώματος διαφορετικών γραφικών στοιχείων χρησιμοποιώντας τη μέθοδο 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()

Σημειώστε ότι η κλάση QPalette ανήκει στη μονάδα QtGui και θα χρειαστεί να την εισαγάγετε για να λειτουργήσει αυτό. Μόλις δημιουργήσετε το αντικείμενο QPalette, χρησιμοποιήστε τη μέθοδο setColor() για να περάσετε το όνομα ενός γραφικού στοιχείου του οποίου το χρώμα θέλετε να αλλάξετε και το χρώμα που θέλετε να ορίσετε.

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

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

app.setPalette(qp)

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

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

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

Και οι δύο συνδέονται στις ίδιες βιβλιοθήκες Qt και μοιράζονται σχεδόν πανομοιότυπα API. Η βασική διαφορά είναι η αδειοδότηση: το PyQt χρησιμοποιεί GPL ή μια εμπορική άδεια επί πληρωμή, ενώ το PySide (Qt για Python) χρησιμοποιεί την άδεια LGPL, επιτρέποντας τη δωρεάν διανομή κλειστού κώδικα.

Το Qt Designer είναι ένα εργαλείο μεταφοράς και απόθεσης που αποθηκεύει τη διάταξή σας ως αρχείο XML .ui. Μετατρέψτε το σε Python με το βοηθητικό πρόγραμμα pyuic5 ή φορτώστε το κατά τον χρόνο εκτέλεσης χρησιμοποιώντας την εντολή uic.loadUi().

Το PyQt6 συνδέεται με το νεότερο πλαίσιο Qt 6 και απαιτεί πλήρως προσδιορισμένες απαρίθμήσεις, όπως το Qt.AlignmentFlag.AlignLeft. Το PyQt5 στοχεύει στο Qt 5 και παραμένει η πιο ευρέως χρησιμοποιούμενη έκδοση. Το PyQt6 επίσης καταργεί ορισμένες παρωχημένες ενότητες και προσθέτει καλύτερη υποστήριξη υψηλού DPI.

Χρησιμοποιήστε το PyInstaller: εκτελέστε την εντολή pyinstaller –onefile –windowed app.py για να συνδυάσετε το σκριπτ σας, το PyQt5 και τις βιβλιοθήκες Qt σε ένα μόνο εκτελέσιμο αρχείο. Η σημαία –windowed αποκρύπτει την κονσόλα. Τα fbs και cx_Freeze είναι δημοφιλείς εναλλακτικές λύσεις.

Το PyQt5 είναι φιλικό προς αρχάριους αν γνωρίζετε βασικά PythonΗ κατανόηση των κλάσεων, των αντικειμένων και του μοτίβου σημάτων και υποδοχών βοηθάει περισσότερο. Το Qt Designer σάς επιτρέπει να δημιουργείτε διατάξεις οπτικά, ώστε να μπορείτε να δημιουργείτε λειτουργικά παράθυρα πριν να τελειοποιήσετε κάθε γραφικό στοιχείο χειροκίνητα.

Το PyQt δημιουργεί front-end για υπολογιστές για μοντέλα μηχανικής μάθησης — πίνακες ελέγχου που φορτώνουν δεδομένα, ενεργοποιούν εκπαίδευση ή συμπεράσματα και εμφανίζουν προβλέψεις, γραφήματα ή εικόνες. Συνδυάζεται καλά με το NumPy, το pandas και το Matplotlib, το wrap.ping ένα εκπαιδευμένο μοντέλο σε ένα φιλικό γραφικό περιβάλλον χρήστη.

Ναι. Το GitHub Copilot συμπληρώνει αυτόματα κοινά μοτίβα PyQt5, όπως η ρύθμιση QApplication, η δημιουργία widget και οι συνδέσεις signal-slot από ένα σχόλιο ή όνομα συνάρτησης. Να εκτελείτε πάντα το δημιουργημένο παράθυρο για να επιβεβαιώνετε ότι οι διατάξεις και οι χειριστές συμβάντων συμπεριφέρονται όπως προβλέπεται.

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