Blame platform-demos/el/image-viewer.py.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="image-viewer.py" xml:lang="el">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">Προβολέας εικόνων (Python)</title>
Packit 1470ea
    <link type="guide" xref="py#examples"/>
Packit 1470ea
Packit 1470ea
    <desc>Μια λίγο περισσότερο από απλή εφαρμογή σαν το "Γεια σου κόσμε" - γράψτε έναν προβολέα εικόνων σε GTK.</desc>
Packit 1470ea
Packit 1470ea
    <revision pkgversion="0.1" version="0.1" date="2011-03-19" status="review"/>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Jonh Wendell</name>
Packit 1470ea
      <email its:translate="no">jwendell@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Johannes Schmid</name>
Packit 1470ea
      <email its:translate="no">jhs@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="editor">
Packit 1470ea
      <name>Marta Maria Casetti</name>
Packit 1470ea
      <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
      <years>2013</years>
Packit 1470ea
    </credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Ελληνική μεταφραστική ομάδα GNOME</mal:name>
Packit 1470ea
      <mal:email>team@gnome.gr</mal:email>
Packit 1470ea
      <mal:years>2012-2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Δημήτρης Σπίγγος</mal:name>
Packit 1470ea
      <mal:email>dmtrs32@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012, 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Μαρία Θουκιδίδου</mal:name>
Packit 1470ea
      <mal:email>marablack3@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Θάνος Τρυφωνίδης</mal:name>
Packit 1470ea
      <mal:email>tomtryf@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014, 2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>Προβολή εικόνων</title>
Packit 1470ea
Packit 1470ea
<synopsis>
Packit 1470ea
  

Σε αυτόν το μάθημα θα γράψουμε μια πολύ απλή εφαρμογή σε GTK που φορτώνει και εμφανίζει ένα αρχείο εικόνας. Θα μάθετε πώς να:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

Γράψετε μια βασική διεπαφή χρήστη GTK σε Python

</item>
Packit 1470ea
    <item>

Να αντιμετωπίζετε συμβάντα συνδέοντας σήματα με τους χειριστές σημάτων

</item>
Packit 1470ea
    <item>

Σχεδιάζετε διεπαφές χρήστη GTK χρησιμοποιώντας περιέκτες

</item>
Packit 1470ea
    <item>

Φορτώνετε και να εμφανίζετε αρχεία εικόνων

</item>
Packit 1470ea
  </list>
Packit 1470ea
  

Θα χρειαστείτε τα παρακάτω για να μπορέσετε να ακολουθήσετε αυτό το μάθημα:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

Ένα εγκατεστημένο αντίγραφο του <link xref="getting-ready">Anjuta IDE</link>

</item>
Packit 1470ea
    <item>

Βασική γνώση της γλώσσας προγραμματισμού Python

</item>
Packit 1470ea
  </list>
Packit 1470ea
</synopsis>
Packit 1470ea
Packit 1470ea
<media type="image" mime="image/png" src="media/image-viewer.png"/>
Packit 1470ea
Packit 1470ea
<section id="anjuta">
Packit 1470ea
  <title>Δημιουργία έργου με το Anjuta</title>
Packit 1470ea
  

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

Packit 1470ea
  <steps>
Packit 1470ea
    <item>
Packit 1470ea
    

Ξεκινήστε το Anjuta και πατήστε <guiseq><gui>αρχείο</gui><gui>νέο</gui><gui>έργο</gui></guiseq> για να ανοίξετε τον οδηγό του έργου.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Επιλέξτε <gui>PyGTK (automake)</gui> από την καρτέλα <gui>Python</gui>, πατήστε <gui>συνέχεια</gui>, και συμπληρώστε τις λεπτομέρειες σας στις επόμενες λίγες σελίδες. Χρησιμοποιήστε το <file>image-viewer</file> ως όνομα του έργου και του καταλόγου.

Packit 1470ea
   	</item>
Packit 1470ea
   	<item>
Packit 1470ea
   	

Βεβαιωθείτε ότι απενεργοποιήσατε το <gui>χρήση του GtkBuilder για διεπαφή χρήση</gui> επειδή θα φτιάξουμε τη διεπαφή χρήστη χειροκίνητα σε αυτό το παράδειγμα. Για ένα παράδειγμα χρήσης του σχεδιαστή διεπαφής, δείτε το <link xref="guitar-tuner.py">επίδειξη ρυθμιστή κιθάρας</link>.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Πατήστε <gui>εφαρμογή</gui> και το έργο θα δημιουργηθεί για εσάς. Ανοίξτε το <file>src/image_viewer.py</file> από τις καρτέλες <gui>έργο</gui> ή <gui>αρχείο</gui>. Περιλαμβάνει πολύ βασικό παράδειγμα κώδικα.

Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="first">
Packit 1470ea
  <title>Μια πρώτη εφαρμογή σε Gtk</title>
Packit 1470ea
  

Για να δούμε πως φαίνεται μια πολύ βασική εφαρμογή Gtk σε Python:

Packit 1470ea
  
Packit 1470ea
from gi.repository import Gtk, GdkPixbuf, Gdk
Packit 1470ea
import os, sys
Packit 1470ea
Packit 1470ea
class GUI:
Packit 1470ea
	def __init__(self):
Packit 1470ea
		window = Gtk.Window()
Packit 1470ea
		window.set_title ("Hello World")
Packit 1470ea
		window.connect_after('destroy', self.destroy)
Packit 1470ea
Packit 1470ea
		window.show_all()
Packit 1470ea
Packit 1470ea
	def destroy(window, self):
Packit 1470ea
		Gtk.main_quit()
Packit 1470ea
Packit 1470ea
def main():
Packit 1470ea
	app = GUI()
Packit 1470ea
	Gtk.main()
Packit 1470ea
Packit 1470ea
if __name__ == "__main__":
Packit 1470ea
    sys.exit(main())
Packit 1470ea
Packit 1470ea
  
Packit 1470ea
  

Ας ρίξουμε μια ματιά στο τι γίνεται:

Packit 1470ea
  <list>
Packit 1470ea
    <item>
Packit 1470ea
    

Η πρώτη γραμμή εισάγει το όνομα χώρου Gtk (αυτό είναι που περιέχει την βιβλιοθήκη του Gtk). Οι βιβλιοθήκες παρέχονται από το GObject Introspection (gi), που παρέχει γλωσσικές συσχετίσεις για πολλές βιβλιοθήκες του GNOME.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Η μέθοδος __init__ της κλάσης GUI δημιουργεί ένα (άδειο) Gtk.Window, ορίζει τον τίτλο του και μετά συνδέει ένα σήμα να τερματίζει την εφαρμογή όταν το παράθυρο κλείσει. Είναι πολύ απλό, περισσότερα για τα σήματα αργότερα.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Μετά, ορίζουμε το destroy το οποίο απλά θα τερματίσει την εφαρμογή. Καλείται από το σήμα destroy που συνδέσατε παραπάνω.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Το υπόλοιπο του αρχείου κάνει αρχικοποίηση για το Gtk και εμφανίζει το GUI.

Packit 1470ea
    </item>
Packit 1470ea
  </list>
Packit 1470ea
Packit 1470ea
  

Ο κώδικας είναι έτοιμος να εκτελεστεί, οπότε δοκιμάστε το πατώντας <guiseq><gui>τρέξιμο</gui><gui>Εκτέλεση</gui></guiseq>. Θα πρέπει να εμφανίσει ένα άδειο παράθυρο.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="signals">
Packit 1470ea
  <title>Σήματα</title>
Packit 1470ea
  

Τα σήματα είναι μια από τις έννοιες κλειδιά για τον προγραμματισμό Gtk. Όποτε κάτι συμβαίνει σε ένα αντικείμενο, εκπέμπει ένα σήμα· για παράδειγμα, όταν πατιέται ένα κουμπί εκπέμπει το σήμα clicked. Άμα θέλετε το πρόγραμμά σας να κάνει κάτι όταν αυτό συμβαίνει, πρέπει να συνδέσετε μια συνάρτηση (έναν "χειριστή σημάτων") σε αυτό το σήμα. Ορίστε ένα παράδειγμα:

Packit 1470ea
  
Packit 1470ea
def button_clicked () :
Packit 1470ea
  print "you clicked me!"
Packit 1470ea
Packit 1470ea
b = new Gtk.Button ("Click me")
Packit 1470ea
b.connect_after ('clicked', button_clicked)
Packit 1470ea
  

Οι τελευταίες δύο γραμμές δημιουργούν ένα Gtk.Button που ονομάζεται b και συνδέει το σήμα το clicked στην συνάρτηση button_clicked, η οποία ορίζεται πιο πάνω. Κάθε φορά που πατιέται ένα κουμπί, ο κώδικας στη συνάρτηση button_clicked θα εκτελείται. Εδώ απλά τυπώνει ένα μήνυμα.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="containers">
Packit 1470ea
  <title>Περιέκτες: Σχεδίαση διεπαφής χρήστη</title>
Packit 1470ea
  

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

Packit 1470ea
  

Ένα Gtk.Window είναι από μόνο του ένα είδος περιέκτη, αλλά μπορείτε να τοποθετήσετε μόνο ένα γραφικό στοιχείο άμεσα πάνω του. Θα θέλαμε να είχαμε δύο γραφικά στοιχεία, μια εικόνα και ένα κουμπί, άρα θα πρέπει να τοποθετήσουμε έναν υποδοχέα "υψηλότερης χωρητικότητας" μέσα στο παράθυρο για να κρατάει τα άλλα γραφικά στοιχεία. Ένας αριθμός από <link href="http://library.gnome.org/devel/gtk/stable/GtkContainer.html">τύπους περιεκτών</link> είναι διαθέσιμοι, αλλά θα χρησιμοποιήσουμε εδώ ένα Gtk.Box. Ένα Gtk.Box μπορεί να κρατήσει πολλά γραφικά στοιχεία, οργανωμένα οριζόντια ή κάθετα. Μπορείτε να κάνετε και πιο περίπλοκες διατάξεις βάζοντας πολλά πλαίσια το ένα μέσα στο άλλο κ.ο.κ.

Packit 1470ea
  <note>
Packit 1470ea
  

Υπάρχει ένας γραφικός σχεδιαστής διεπαφής χρήστη με όνομα <app>Glade</app> ενσωματωμένος στο <app>Anjuta</app> που κάνει τη σχεδίαση γραφικού περιβάλλοντος πολύ εύκολη. Για αυτό το απλό παράδειγμα, όμως, θα κωδικοποιήσουμε τα πάντα χειροκίνητα.

Packit 1470ea
  </note>
Packit 1470ea
  

Ας προσθέσουμε ένα πλαίσιο και γραφικά στοιχεία στο παράθυρο. Προσθέστε τον παρακάτω κώδικα στη μέθοδο __init__, αμέσως μετά τη γραμμή window.connect_after:

Packit 1470ea
Packit 1470ea
box = Gtk.Box()
Packit 1470ea
box.set_spacing (5)
Packit 1470ea
box.set_orientation (Gtk.Orientation.VERTICAL)
Packit 1470ea
window.add (box)
Packit 1470ea
Packit 1470ea
Packit 1470ea
  

Η πρώτη γραμμή δημιουργεί ένα Gtk.Box που ονομάζεται box και οι επόμενες γραμμές ρυθμίζουν δύο από τις ιδιότητες του: το orientation ρυθμίζεται σε κάθετο (οπότε τα γραφικά στοιχεία τοποθετούνται σε στήλη) και το spacing ανάμεσα στα γραφικά στοιχεία έχει ρυθμιστεί στα 5 εικονοστοιχεία. Η επόμενη γραμμή έπειτα προσθέτει στο παράθυρο το νεοδημιουργημένο Gtk.Box.

Packit 1470ea
  

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

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="packing">
Packit 1470ea
  <title>Συσκευασία: Πρόσθεση γραφικών στοιχείων στον περιέκτη</title>
Packit 1470ea
  

Για να προσθέσετε κάποια γραφικά στοιχεία στο Gtk.Box, εισάγετε τον ακόλουθο κώδικα ακριβώς κάτω από την γραμμή window.add (box):

Packit 1470ea
  
Packit 1470ea
self.image = Gtk.Image()
Packit 1470ea
box.pack_start (self.image, False, False, 0)
Packit 1470ea
  

Η πρώτη γραμμή δημιουργεί ένα καινούργιο Gtk.Image που ονομάζεται image, που θα εμφανίζει ένα αρχείο εικόνας. Καθώς το χρειαζόμαστε αργότερα στο χειριστή σημάτων, θα το ορίσουμε ως μεταβλητή ευρείας κλάσης. Πρέπει να προσθέσετε το image = 0 στην αρχή της κλάσης GUI. Έπειτα, το γραφικό στοιχείο της εικόνας προστίθεται (πακετάρεται) στον περιέκτη box χρησιμοποιώντας τη μέθοδο <link href="http://library.gnome.org/devel/gtk/stable/GtkBox.html#gtk-box-pack-start">pack_start</link> του GtkBox.

Packit 1470ea
  

Το pack_start παίρνει 4 παραμέτρους: το γραφικό στοιχείο που θα προστεθεί στο GtkBox (child)· αν το Gtk.Box πρέπει να μεγαλώσει όταν προστεθεί νέο γραφικό στοιχείο (expand)· αν το νέο γραφικό στοιχείο θα έπρεπε να καλύψει όλο τον δημιουργημένο επιπλέον χώρο αν μεγαλώσει το Gtk.Box (fill)· και πόσος χώρος πρέπει να υπάρχει, σε εικονοστοιχεία, ανάμεσα στο γραφικό στοιχείο και στους γείτονές του μέσα στο Gtk.Box, (padding).

Packit 1470ea
  

Οι περιέκτες (και τα γραφικά στοιχεία) του Gtk επεκτείνονται δυναμικά για να καλύψουν τον διαθέσιμο χώρο, αν τα αφήσετε. Δεν τοποθετείτε τα γραφικά στοιχεία δίνοντας τους ακριβείς θέσεις x, y-συντεταγμένων στο παράθυρο· αλλά, τοποθετούνται σχετικά μεταξύ τους. Αυτό κάνει το χειρισμό της αλλαγής του μεγέθους του παραθύρου πιο εύκολη και τα γραφικά στοιχεία πρέπει να πάρουν αυτόματα ένα λογικό μέγεθος στις περισσότερες περιπτώσεις.

Packit 1470ea
  

Επίσης σημειώστε πώς τα γραφικά στοιχεία οργανώνονται σε μια ιεραρχία. Μόλις πακεταριστούν μέσα στο Gtk.Box, το Gtk.Image θεωρείται θυγατρικό του Gtk.Box. Αυτό επιτρέπει να συμπεριφερθούμε σε όλα τα θυγατρικά ενός γραφικού στοιχείου ως μια ομάδα· για παράδειγμα, μπορείτε να κρύψετε το Gtk.Box, που θα κρύψει επίσης όλα τα θυγατρικά του ταυτόχρονα.

Packit 1470ea
  

Τώρα προσθέστε αυτές τις δύο γραμμές, κάτω από αυτές που μόλις προσθέσατε:

Packit 1470ea
  
Packit 1470ea
button = Gtk.Button ("Open a picture...")
Packit 1470ea
box.pack_start (button, False, False, 0)
Packit 1470ea
Packit 1470ea
  

Αυτές οι γραμμές είναι παρόμοιες με τις δυο πρώτες, αλλά αυτή τη φορά δημιουργούν ένα Gtk.Button και το προσθέτουν στο box. Σημειώστε ότι ορίζουμε την (δεύτερη) παράμετρο, την expand σε False, ενώ είχε οριστεί True για το Gtk.Image. Έτσι η εικόνα θα πάρει όλο το διαθέσιμο χώρο και τα κουμπιά μόνο όσο χρειάζονται. Όταν μεγιστοποιήσεις το παράθυρο, το μέγεθος των κουμπιών θα παραμείνει το ίδιο, ενώ της εικόνας θα αυξηθεί, χρησιμοποιώντας όλο το υπόλοιπο παράθυρο.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="loading">
Packit 1470ea
  <title>Φόρτωση της εικόνας: Σύνδεση στο σήμα του κουμπιού clicked</title>
Packit 1470ea
  

Όταν ο χρήστης πατήσει πάνω στο κουμπί <gui>Άνοιγμα εικόνας…</gui>, ένας διάλογος θα εμφανιστεί ώστε ο χρήστης να διαλέξει μια εικόνα. Μόλις διαλέξει, η εικόνα θα φορτωθεί και θα εμφανιστεί στο αντίστοιχο γραφικό στοιχείο.

Packit 1470ea
  

Το πρώτο βήμα είναι να συνδέσουμε το σήμα clicked του κουμπιού με μια συνάρτηση χειριστή σημάτων, την οποία ονομάζουμε on_open_clicked. Βάλτε αυτόν τον κώδικα αμέσως μετά την γραμμή που το κουμπί δημιουργείται button = Gtk.Button():

Packit 1470ea
  
Packit 1470ea
button.connect_after('clicked', self.on_open_clicked)
Packit 1470ea
Packit 1470ea
  

Αυτό θα συνδέσει το σήμα clicked στη μέθοδο on_open_clicked η οποία θα οριστεί παρακάτω.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="loading2">
Packit 1470ea
  <title>Φόρτωση της εικόνας: Γράφοντας την επανάκληση του σήματος</title>
Packit 1470ea
  

Τώρα μπορούμε να δημιουργήσουμε τη μέθοδο on_open_clicked. Εισάγετε τα ακόλουθα στη κλάση GUI, μετά τη μέθοδο __init__:

Packit 1470ea
    
Packit 1470ea
def on_open_clicked (self, button):
Packit 1470ea
	dialog = Gtk.FileChooserDialog ("Open Image", button.get_toplevel(), Gtk.FileChooserAction.OPEN);
Packit 1470ea
	dialog.add_button (Gtk.STOCK_CANCEL, 0)
Packit 1470ea
	dialog.add_button (Gtk.STOCK_OK, 1)
Packit 1470ea
	dialog.set_default_response(1)
Packit 1470ea
Packit 1470ea
	filefilter = Gtk.FileFilter ()
Packit 1470ea
	filefilter.add_pixbuf_formats ()
Packit 1470ea
	dialog.set_filter(filefilter)
Packit 1470ea
Packit 1470ea
	if dialog.run() == 1:
Packit 1470ea
		self.image.set_from_file(dialog.get_filename())
Packit 1470ea
Packit 1470ea
	dialog.destroy()
Packit 1470ea
  

Αυτό είναι λίγο πιο περίπλοκο από όσα έχουμε κάνει μέχρι τώρα, για αυτό θα το χωρίσουμε σε κομμάτια:

Packit 1470ea
  <list>
Packit 1470ea
    <item>
Packit 1470ea
      

Η γραμμή που ξεκινάει με dialog δημιουργεί έναν διάλογο <gui>Open</gui>, τον οποίο ο χρήστης χρησιμοποιεί για να διαλέξει αρχεία. Ορίζουμε τρεις ιδιότητες: τον τίτλο του διαλόγου, την ενέργεια (type) του διαλόγου (είναι διάλογος "open", αλλά θα μπορούσαμε να χρησιμοποιήσουμε SAVE αν θέλαμε να αποθηκεύσουμε ένα αρχείο)· και transient_for, όπου ορίζει το γονικό παράθυρο του διαλόγου.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Οι επόμενες δύο γραμμές προσθέτουν τα κουμπιά <gui>Cancel</gui> και <gui>Open</gui> στο διάλογο. Το δεύτερο όρισμα της μεθόδου του add_button είναι η (ακέραιη) τιμή που επιστρέφει όταν πατιέται το κουμπί: 0 για το <gui>Ακύρωση</gui> και 1 για το <gui>Άνοιγμα</gui>.

Packit 1470ea
    

Σημειώστε όταν χρησιμοποιούμε τα προκαθορισμένα ονόματα κουμπιών που υπάρχουν στο Gtk, αντί να γράψουμε οι ίδιοι "Ακύρωση" ή "Άνοιγμα". Το πλεονέκτημα στη χρήση των προκαθορισμένων ονομάτων είναι ότι οι ετικέτες των κουμπιών θα έχουν ήδη μεταφραστεί στη γλώσσα του χρήστη.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

To set_default_response καθορίζει ποιο κουμπί θα ενεργοποιηθεί όταν ο χρήστης επιλέξει ένα αρχείο με διπλό κλικ ή πατήσει <key>Enter</key>. Στην περίπτωση μας, χρησιμοποιούμε το κουμπί <gui>Άνοιγμα</gui> σαν προεπιλεγμένο (το οποίο έχει τιμή 1).

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Οι επόμενες τρεις γραμμές περιορίζουν το διάλογο <gui>Άνοιγμα</gui> να εμφανίζει μόνο αρχεία που μπορούν να ανοιχθούν από το Gtk.Image. Δημιουργούμε πρώτα ένα αντικείμενο φίλτρου· προσθέτουμε στο φίλτρο όλων των ειδών αρχεία που υποστηρίζονται από το Gdk.Pixbuf (το οποίο περιέχει τα περισσότερα είδη εικόνων όπως PNG και JPEG). Τέλος, καθορίζουμε το φίλτρο να είναι το φίλτρο του διαλόγου <gui>Άνοιγμα</gui>.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Το dialog.run εμφανίζει το διάλογο <gui>Άνοιγμα</gui>. Ο διάλογος θα περιμένει τον χρήστη να διαλέξει μια εικόνα· όταν διαλέξει, το dialog.run θα επιστρέψει την τιμή <output>1</output> (θα επιστρέψει <output>0</output> αν ο χρήστης πατήσει <gui>Ακύρωση</gui>). Ο έλεγχος ροής if ελέγχει για αυτό.

Packit 1470ea
    </item>
Packit 1470ea
    <item>

Αν υποθέσουμε ότι ο χρήστης πάτησε το <gui>Άνοιγμα</gui>, η επόμενη γραμμή ορίζει την ιδιότητα file του Gtk.Image στο όνομα του αρχείου εικόνας που επέλεξε ο χρήστης. Το Gtk.Image θα φορτώσει και θα εμφανίσει την επιλεγμένη εικόνα.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Στην τελευταία γραμμή αυτής της μεθόδου, καταστρέφουμε τον διάλογο <gui>άνοιγμα</gui> γιατί δεν τον χρειαζόμαστε πια.

Packit 1470ea
    </item>
Packit 1470ea
  </list>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
<section id="run">
Packit 1470ea
  <title>Τρέξτε την εφαρμογή</title>
Packit 1470ea
  

Θα πρέπει να έχετε όλον τον κώδικα που χρειάζεστε, οπότε δοκιμάστε να τον εκτελέσετε. Εδώ είναι το τέλος· ένα πλήρες και λειτουργικό πρόγραμμα προβολής εικόνων (και ένας μικρός οδηγός σε Python και Gtk) σε ελάχιστο χρόνο!

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="impl">
Packit 1470ea
 <title>Υλοποίηση αναφοράς</title>
Packit 1470ea
 

Αν αντιμετωπίσετε πρόβλημα με τον οδηγό, συγκρίνετε τον κώδικά σας με αυτόν τον <link href="image-viewer/image-viewer.py">κώδικα αναφοράς</link>.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="next">
Packit 1470ea
  <title>Επόμενα βήματα</title>
Packit 1470ea
  

Εδώ είναι κάποιες ιδέες για το πώς μπορείτε να επεκτείνετε αυτή την απλή παρουσίαση:

Packit 1470ea
  <list>
Packit 1470ea
   <item>
Packit 1470ea
   

Βάλτε τον χρήστη να επιλέξει ένα κατάλογο αντί για αρχείο και δώστε ελέγχους να γυρίζουν όλες τις εικόνες σε έναν κατάλογο.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
   

Εφαρμόστε τυχαία φίλτρα και εφέ στην εικόνα όταν αυτή φορτωθεί και επιτρέψτε στον χρήστη να αποθηκεύσει την επεξεργασμένη εικόνα.

Packit 1470ea
   

Το <link href="http://www.gegl.org/api.html">GEGL</link> παρέχει ισχυρές δυνατότητες επεξεργασίας εικόνας.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
   

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

Packit 1470ea
   

You can use <link href="http://library.gnome.org/devel/gio/unstable/">GIO</link> to handle network file transfers and the like, and <link href="http://library.gnome.org/devel/gnome-scan/unstable/">GNOME Scan</link> to handle scanning.

Packit 1470ea
   </item>
Packit 1470ea
  </list>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
</page>