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 στην πάνω δεξιά γωνία. Κρατήστε ότι και αυτή μπαίνει πάντα.