Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: PyQt4 : Hello world!

PyQt4 : Hello world! 13 Χρόνια 3 Μήνες πριν #1207

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
O κώδικας που ακολουθεί μπορεί να γραφεί ακομα πιο απλά, χωρίς την κλάση, αλλά καθώς σε όλα τα πιο σύνθετα προγράμματα θα χρειάζεται να δημιουργείτε κλάσεις, είπα να το ξεκινήσω κατευθείαν έτσι.

Το πρόγραμμα αυτό, το μόνο που κάνει είναι να εμφανίζει ένα κενό παράθυρο στην οθόνη. Δεν είναι δηλαδή ούτε καν το Hello world...!
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
#Importing libraries
import sys
from PyQt4 import QtGui
 
# Create a custom sub-Class
# We inherit from the QWidget object
class HelloWorld(QtGui.QWidget):
    def __init__(self):
        super(HelloWorld, self).__init__()
 
# Creating the window
# Showing it at the screen 
# And adding code to destroy it afterwards.
def main():
    app = QtGui.QApplication(sys.argv)
    window = HelloWorld()
    window.show()
    sys.exit(app.exec_())
 
if __name__=='__main__':
    main()

Επεξήγηση
H βασική βιβλιοθήκη του PyQt4 είναι η QtGui και αφορά το σχεδιασμό του GUI.

Η κλάση που δημιουργούμε είναι μία υποκλαση της QtGui.QWidget

To QWidget είναι η βασική κλάση όλων των αντικειμένων που μπορούμε να δημιουργήσουμε με την PyQt4. Όλα τα αντικείμενα κληρονομούν από αυτή τη κλάση ιδιότητες και μεθόδους. Με τον τρόπο αυτό εξασφαλίζεται κοινή συμπεριφορά των αντικειμένων.

To μόνο που κάνουμε είναι να καλούμε τον constructor του QWidget. Σημειώνω ότι χρησιμοποιώ τη built-in μέθοδο super. Για οσους είναι εξοικιωμένοι με τις old-style κλάσεις, η γραμμή αυτή είναι ακριβώς ισοδύναμη με αυτή:
QtGui.QWidget.__init__(self)

Η συνάρτηση main() στην πλειοψηφία των περιπτώσεων δε θα αλλάζει από πρόγραμμα σε πρόγραμμα, εκτός από το όνομα της κλασης που δημιουργήσαμε ("HelloWorld" στην προκειμένη περίπτωση).

Η 1η γραμμή της main() δημιουργεί μια instance της QApplication η οποία πρέπει να είναι παρούσα σε όλα τα προγράμματα PyQt. Έχει σχέση με το πως θα συμπεριφέρεται το παράθυρο που θα δημιουργηθεί και από ότι διάβασα και με τα threads. Κρατήστε ότι μπαίνει παντα.

Η 2ή γραμμή δημιουργεί μια instance της HelloWorld. Εδώ ουσιαστικά δημιουργείται το παράθυρο. Το μόνο που θα αλλάζει από πρόγραμμα σε πρόγραμμα είναι το όνομα της κλάσης (και τα arguments που θέλει το __init__ της).

Η 3ή γραμμή χρησιμοοιεί τη μέθοδο show() της instance που μόλις δημιουργήσαμε (κληρονομημένη από το QWidget), για να εμφανίσουμε το παράθυρο στην οθόνη.

Η 4ή γραμμή, καταστρέφει το παράθυρο όταν πατήσουμε το x στην πάνω δεξιά γωνία. Κρατήστε ότι και αυτή μπαίνει πάντα.
Τελευταία διόρθωση: 13 Χρόνια 3 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: PyQt4 : Hello world! 13 Χρόνια 3 Μήνες πριν #1208

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Προκειμένου να κάνουμε κάτι λίγο πιο χρήσιμο χρειάζεται να αλλάξουμε παρά μόνο ελάχιστες γραμμές κώδικα. Αυτή τη φορά θα φτιάξουμε ένα παράθυρο που θα εμφανίζει ένα μήνυμα.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
#Importing libraries
import sys
from PyQt4 import QtGui
 
# Create a custom sub-Class
# This time we inherit from the QLabel class
class HelloWorld(QtGui.QLabel):
    def __init__(self, msg):
        super(HelloWorld, self).__init__(msg)
 
#       Or for those who are used to the old-style classes
#       QtGui.QLabel.__init__(self, msg)
 
def main():
    app = QtGui.QApplication(sys.argv)
    window = HelloWorld("My first GUI!!!")
    window.show()
    sys.exit(app.exec_())
 
if __name__=='__main__':
    main()

Άλλαξαν οι γραμμές
...
class HelloWorld(QtGui.QLabel):
    def __init__(self, msg):
        super(HelloWorld, self).__init__(msg)
#       QtGui.QLabel.__init__(self, msg)
...
    window = HelloWorld("My first GUI!!!")

Αυτή τη φορά κληρονομούμε από το QLabel που είναι το βασικό widget της PyQt4 για να εμφανίσουμε κείμενο στην οθόνη. Η μέθοδος __init__ του QLabel απαιτεί ένα ορισμα τύπου string το οποίο και είναι το κείμενο που εμφανίζουμε στην οθόνη. To όρισμα αυτό το δίνουμε όταν δημιουργούμε την instance της HelloWorld στη main.

Σημειώνεται ότι η QLabel είναι μια υποκλάση της QWidget, αρα έχει κληρονομήσει από αυτήν όλες της τις ιδιότητες και τις μεθόδους (για αυτό και μπορούμε να καλέσουμε τη μεθοδο show στη main()).
Τελευταία διόρθωση: 13 Χρόνια 3 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.538 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου