Blame platform-demos/el/signals-callbacks.py.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:e="http://projectmallard.org/experimental/" type="guide" style="task" id="signals-callbacks.py" xml:lang="el">
Packit 1470ea
Packit 1470ea
<info>
Packit 1470ea
  <title type="text">Σήματα και επανακλήσεις (Python)</title>
Packit 1470ea
  <link type="guide" xref="beginner.py#theory"/>
Packit 1470ea
  <link type="next" xref="button.py"/>
Packit 1470ea
  <revision version="0.1" date="2012-06-16" status="draft"/>
Packit 1470ea
Packit 1470ea
  <desc>Μια εξήγηση των σημάτων και των επανακλήσεων στο GTK+.</desc>
Packit 1470ea
  <credit type="author copyright">
Packit 1470ea
    <name>Sebastian Pölsterl</name>
Packit 1470ea
    <email its:translate="no">sebp@k-d-w.org</email>
Packit 1470ea
    <years>2011</years>
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>2012</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
<links type="section"/>
Packit 1470ea
Packit 1470ea
<section id="overview">
Packit 1470ea
<title>Επισκόπηση</title>
Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea

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

Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="references">
Packit 1470ea
Packit 1470ea
<title>Αναφορές</title>
Packit 1470ea

<link href="http://developer.gnome.org/gobject/stable/signal.html">Σήματα</link> στην τεκμηρίωση GObject

Packit 1470ea

<link href="http://python-gtk-3-tutorial.readthedocs.org/en/latest/basics.html">Βασικά - Κύριος βρόχος και σήματα</link> στο μάθημα Python GTK+ 3

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