# Σήματα και επανακλήσεις (Python)

Μια εξήγηση των σημάτων και των επανακλήσεων στο GTK+.
Sebastian Pölsterl
sebp@k-d-w.org 2011
Marta Maria Casetti
mmcasetti@gmail.com 2012
Ελληνική μεταφραστική ομάδα GNOME
team@gnome.gr 2012-2015
Δημήτρης Σπίγγος
dmtrs32@gmail.com 2012, 2013
Μαρία Θουκιδίδου
marablack3@gmail.com 2014
Θάνος Τρυφωνίδης
tomtryf@gmail.com 2014, 2015

# Σήματα και επανακλήσεις

# Επισκόπηση

Όπως τα περισσότερα πακέτα εργαλείων GUI, το GTK+ χρησιμοποιεί ένα πρότυπο προγραμματισμού οδηγούμενο από συμβάντα. Όταν ο χρήστης δεν κάνει τίποτα, το GTK+ κάθεται στον κύριο βρόχο και περιμένει για εισαγωγή. Εάν ο χρήστης εκτελέσει κάποια ενέργεια - ας πούμε, πάτημα ποντικιού - τότε ο κύριος βρόχος "ξυπνά" και διαβιβάζει ένα συμβάν στο GTK+.

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

Ένα γενικό παράδειγμα είναι: `handler_id = widget.connect("event", callback, data)`. `widget` είναι ένα στιγμιότυπο του γραφικού στοιχείου που δημιουργήσαμε νωρίτερα. Κατόπιν ενδιαφερόμαστε για το `event`. Κάθε γραφικό στοιχείο έχει τα δικά του συγκεκριμένα συμβάντα που μπορούν να συμβούν. Για παράδειγμα, εάν έχετε ένα Gtk.Button συνήθως θέλετε να συνδεθείτε με το "πατημένο" συμβάν: αυτό σημαίνει ότι όταν το κουμπί πατιέται, το σήμα εκδίδεται. Ένα άλλο παράδειγμα είναι το σήμα `notify::property`: όποτε μια ιδιότητα τροποποιείται σε ένα GObject, αντί για απλή εκπομπή του σήματος `notify`, το GObject συσχετίζει ως μια λεπτομέρεια σε αυτή την εκπομπή σήματος το όνομα της τροποποιημένης ιδιότητας. Αυτό επιτρέπει στους πελάτες που επιθυμούν να ειδοποιηθούν για τις αλλαγές σε μόνο μια ιδιότητα να φιλτράρουν τα περισσότερα συμβάντα πριν τα δεχθούν. Τρίτο, το όρισμα επανάκλησης είναι το όνομα της συνάρτησης επανάκλησης, που περιέχει τον κώδικα που εκτελείται όταν τα σήματα του συγκεκριμένου τύπου εκδίδονται. Τελικά, το προαιρετικό όρισμα δεδομένων περιλαμβάνει οποιαδήποτε δεδομένα που θα έπρεπε μα περαστούν όταν το σήμα εκδίδεται.

Η συνάρτηση επιστρέφει έναν αριθμό (the `handler_id`) που αναγνωρίζει αυτό το συγκεκριμένο ζευγάρι σήματος-επανάκλησης. Αυτός ο αριθμός απαιτείται για αποσύνδεση από ένα τέτοιο σήμα που η συνάρτηση επανάκλησης δεν θα κληθεί κατά τη διάρκεια οποιωνδήποτε μελλοντικών ή τρεχόντων συνεχιζόμενων εκπομπών του σήματος στο οποίο συνδέθηκε, όπως στο `widget.disconnect(handler_id)`.

# Αναφορές

Σήματα στην τεκμηρίωση GObject

Βασικά - Κύριος βρόχος και σήματα στο μάθημα Python GTK+ 3