Εκμάθηση PyQt5 με Παραδείγματα: Σχεδίαση GUI χρησιμοποιώντας PyQt in Python

Τι είναι το PyQt;

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

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

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

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

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

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

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

Εκδόσεις PyQt

Το PyQt είναι διαθέσιμο σε δύο εκδόσεις, PyQt4 και PyQt5. Το PyQt4 παρέχει κώδικα κόλλας για δέσμευση εκδόσεων 4.x και 5.x του πλαισίου Qt ενώ το PyQt5 παρέχει δέσμευση μόνο για τις εκδόσεις 5.x. Ως αποτέλεσμα, το PyQt5 δεν είναι συμβατό προς τα πίσω με τις καταργημένες μονάδες της παλαιότερης έκδοσης. Σε αυτό το σεμινάριο Qt GUI, το 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 που θα εμφανίσει ένα κενό παράθυρο στην οθόνη σας.

Βάλτε φωτιά στον πύθωνα σας 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, δεν περάσατε κανένα όρισμα στο QApplications. Επομένως, μπορείτε επίσης να το αντικαταστήσετε με τον παρακάτω κωδικό και να μην χρειαστεί καν να εισαγάγετε τη λειτουργική μονάδα sys.

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 και η υπογράμμιση επιλύει τη διένεξη ονομασίας.

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

Στην προηγούμενη ενότητα, είδατε πώς να δημιουργήσετε ένα βασικό widget σε 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.

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

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

 widget.signal.connect(slot)

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

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

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

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

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

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

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

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

  • Qt: Συνδυάζει όλες τις κλάσεις/ενότητες που αναφέρονται παρακάτω σε μια ενιαία ενότητα. Αυξάνει σημαντικά τη μνήμη που χρησιμοποιεί η εφαρμογή. Ωστόσο, είναι πιο εύκολο να διαχειριστείτε το πλαίσιο εισάγοντας μόνο μία λειτουργική μονάδα.
  • QtCore: Περιέχει τις βασικές μη γραφικές κλάσεις που χρησιμοποιούνται από άλλες ενότητες. Εδώ υλοποιούνται ο βρόχος συμβάντων Qt, τα σήματα και η συνδεσιμότητα υποδοχής κ.λπ.
  • QtWidgets: Περιέχει τα περισσότερα από τα γραφικά στοιχεία που είναι διαθέσιμα στο 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: Χρησιμοποιείται για τη δημιουργία γραμμών κύλισης που επιτρέπουν στον χρήστη να κάνει κύλιση προς τα πάνω και προς τα κάτω μέσα σε ένα παράθυρο. Αποτελείται από ένα κινητό ρυθμιστικό, ένα ρυθμιστικό κομμάτι και δύο κουμπιά για κύλιση του ρυθμιστικού προς τα πάνω ή προς τα κάτω.
    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)
  • Το col-span (προεπιλογή=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 Theme

θέματα

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

Περίληψη

  • Το PyQt είναι η δέσμευση python για το C++ Πλαίσιο διεπαφής χρήστη, Qt.
  • Οι PyQt4 και PyQt5 είναι οι δύο κύριες εκδόσεις που αναπτύχθηκαν από την Riverbank Computing.
  • Οι κύριες ενότητες του πλαισίου PyQt είναι:
    1. Qt
    2. QtCore
    3. QtWidgets
    4. QtGui
    5. QtSql
    6. QtNetwork
  • Το PyQt υποστηρίζει διάφορα widget όπως:
    1. κουμπιά
    2. Ετικέτες κειμένου
    3. Πεδία κειμένου
    4. Κουμπιά επιλογής και πλαίσια ελέγχου
    5. Γραμμές εργαλείων και γραμμές μενού
    6. κιτ ιστού
    7. Καρτέλες
    8. Docks
  • Στο PyQt, η διαδραστικότητα υλοποιείται χρησιμοποιώντας σήματα και υποδοχές.
  • An συμβάν είναι μια ενέργεια που εκτελείται από έναν χρήστη στο GUI (όπως το κλικ σε ένα κουμπί).
  • A σήμα ανυψώνεται από το αντίστοιχο γραφικό στοιχείο όταν συμβαίνει ένα συμβάν σε αυτό.
  • A θυρίδα είναι μια λειτουργία που συνδέεται με το σήμα και εκτελείται όταν το σήμα ανυψώνεται.
  • Το PyQt έχει μια ισχυρή μηχανή διάταξης και υποστηρίζει προηγμένο σχεδιασμό και διαχείριση διάταξης. Αυτά είναι δύο συχνά χρησιμοποιούμενα σχήματα διάταξης στο PyQt:
    1. Box σχέδιο
    2. Διάταξη πλέγματος
  • Το PyQt designer σάς επιτρέπει να δημιουργείτε προσαρμοσμένα θέματα για εφαρμογή GUI και έχει ενσωματωμένη υποστήριξη για φύλλα στυλ.
  • qtcreator Python μπορεί να χρησιμοποιηθεί για τη δημιουργία διεπαφών χρήστη καθώς και μεμονωμένων εφαρμογών.