Σήματα και επανακλήσεις (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