1<?xml version="1.0" encoding="utf-8"?> 2<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="scale.py" xml:lang="el"> 3 <info> 4 <title type="text">Κλίμακα (Python)</title> 5 <link type="guide" xref="beginner.py#entry"/> 6 <link type="seealso" xref="grid.py"/> 7 <link type="next" xref="textview.py"/> 8 <revision version="0.2" date="2012-06-23" status="draft"/> 9 10 <credit type="author copyright"> 11 <name>Marta Maria Casetti</name> 12 <email its:translate="no">mmcasetti@gmail.com</email> 13 <years>2012</years> 14 </credit> 15 16 <desc>Ένας ολισθητής γραφικού στοιχείου για επιλογή μιας τιμής από μια περιοχή</desc> 17 18 <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright"> 19 <mal:name>Ελληνική μεταφραστική ομάδα GNOME</mal:name> 20 <mal:email>team@gnome.gr</mal:email> 21 <mal:years>2012-2015</mal:years> 22 </mal:credit> 23 24 <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright"> 25 <mal:name>Δημήτρης Σπίγγος</mal:name> 26 <mal:email>dmtrs32@gmail.com</mal:email> 27 <mal:years>2012, 2013</mal:years> 28 </mal:credit> 29 30 <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright"> 31 <mal:name>Μαρία Θουκιδίδου</mal:name> 32 <mal:email>marablack3@gmail.com</mal:email> 33 <mal:years>2014</mal:years> 34 </mal:credit> 35 36 <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright"> 37 <mal:name>Θάνος Τρυφωνίδης</mal:name> 38 <mal:email>tomtryf@gmail.com</mal:email> 39 <mal:years>2014, 2015</mal:years> 40 </mal:credit> 41 </info> 42 43 <title>Κλίμακα</title> 44 <media type="image" mime="image/png" src="media/scale.png"/> 45 <p>Ολίσθηση των κλιμάκων!</p> 46 47 <links type="section"/> 48 49 <section id="code"> 50 <title>Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος</title> 51 <code mime="text/x-python" style="numbered">from gi.repository import Gtk 52import sys 53 54 55class MyWindow(Gtk.ApplicationWindow): 56 57 def __init__(self, app): 58 Gtk.Window.__init__(self, title="Scale Example", application=app) 59 self.set_default_size(400, 300) 60 self.set_border_width(5) 61 62 # two adjustments (initial value, min value, max value, 63 # step increment - press cursor keys to see!, 64 # page increment - click around the handle to see!, 65 # page size - not used here) 66 ad1 = Gtk.Adjustment(0, 0, 100, 5, 10, 0) 67 ad2 = Gtk.Adjustment(50, 0, 100, 5, 10, 0) 68 69 # an horizontal scale 70 self.h_scale = Gtk.Scale( 71 orientation=Gtk.Orientation.HORIZONTAL, adjustment=ad1) 72 # of integers (no digits) 73 self.h_scale.set_digits(0) 74 # that can expand horizontally if there is space in the grid (see 75 # below) 76 self.h_scale.set_hexpand(True) 77 # that is aligned at the top of the space allowed in the grid (see 78 # below) 79 self.h_scale.set_valign(Gtk.Align.START) 80 81 # we connect the signal "value-changed" emitted by the scale with the callback 82 # function scale_moved 83 self.h_scale.connect("value-changed", self.scale_moved) 84 85 # a vertical scale 86 self.v_scale = Gtk.Scale( 87 orientation=Gtk.Orientation.VERTICAL, adjustment=ad2) 88 # that can expand vertically if there is space in the grid (see below) 89 self.v_scale.set_vexpand(True) 90 91 # we connect the signal "value-changed" emitted by the scale with the callback 92 # function scale_moved 93 self.v_scale.connect("value-changed", self.scale_moved) 94 95 # a label 96 self.label = Gtk.Label() 97 self.label.set_text("Move the scale handles...") 98 99 # a grid to attach the widgets 100 grid = Gtk.Grid() 101 grid.set_column_spacing(10) 102 grid.set_column_homogeneous(True) 103 grid.attach(self.h_scale, 0, 0, 1, 1) 104 grid.attach_next_to( 105 self.v_scale, self.h_scale, Gtk.PositionType.RIGHT, 1, 1) 106 grid.attach(self.label, 0, 1, 2, 1) 107 108 self.add(grid) 109 110 # any signal from the scales is signaled to the label the text of which is 111 # changed 112 def scale_moved(self, event): 113 self.label.set_text("Horizontal scale is " + str(int(self.h_scale.get_value())) + 114 "; vertical scale is " + str(self.v_scale.get_value()) + ".") 115 116 117class MyApplication(Gtk.Application): 118 119 def __init__(self): 120 Gtk.Application.__init__(self) 121 122 def do_activate(self): 123 win = MyWindow(self) 124 win.show_all() 125 126 def do_startup(self): 127 Gtk.Application.do_startup(self) 128 129app = MyApplication() 130exit_status = app.run(sys.argv) 131sys.exit(exit_status) 132</code> 133 </section> 134 135 <section id="methods"> 136 <title>Χρήσιμες μέθοδοι για γραφικό στοιχείο κλίμακας</title> 137 <p>Μια Gtk.Adjustment απαιτείται για να δομήσει την Gtk.Scale. Αυτή είναι η αναπαράσταση μιας τιμής με κάτω και άνω όριο, μαζί με αυξήσεις βήματος και σελίδας και ένα μέγεθος σελίδας και δομείται ως <code>Gtk.Adjustment(value, lower, upper, step_increment, page_increment, page_size)</code> όπου τα πεδία είναι του τύπου <code>float</code>· <code>step_increment</code> είναι η αύξηση/μείωση που παίρνεται χρησιμοποιώντας τα πλήκτρα δρομέα, <code>page_increment</code> αυτή που παίρνεται πατώντας στην ίδια την κλίμακα. Σημειώστε ότι το <code>page_size</code> δεν χρησιμοποιείται σε αυτήν την περίπτωση, θα πρέπει να οριστεί σε <code>0</code>.</p> 138 <p>Στη γραμμή 28 το σήμα <code>"value-changed"</code> συνδέεται με τη συνάρτηση επανάκλησης <code>scale_moved()</code> χρησιμοποιώντας <code><var>widget</var>.connect(<var>signal</var>, <var>callback function</var>)</code>. Δείτε <link xref="signals-callbacks.py"/> για μια πιο λεπτομερή εξήγηση.</p> 139 <list> 140 <item><p>Η <code>get_value()</code> ανακτά την τρέχουσα τιμή της κλίμακας· η <code>set_value(value)</code> την ορίζει (εάν η <code>value</code>, του τύπου <code>float</code>, είναι έξω από την ελάχιστη ή μέγιστη περιοχή, θα δεσμευθεί να προσαρμοστεί μέσα τους). Αυτές είναι οι μέθοδοι της κλάσης Gtk.Range.</p></item> 141 <item><p>Χρησιμοποιήστε <code>set_draw_value(False)</code> για αποφυγή εμφάνισης της τρέχουσας τιμής ως συμβολοσειράς δίπλα στον ολισθητή.</p></item> 142 <item><p>Για τονισμό μέρους της κλίμακας μεταξύ της αρχικής και της τρέχουσας τιμής:</p> 143 <code mime="text/x-python"> 144self.h_scale.set_restrict_to_fill_level(False) 145self.h_scale.set_fill_level(self.h_scale.get_value()) 146self.h_scale.set_show_fill_level(True)</code> 147 <p>στην συνάρτηση επανάκλησης του σήματος "value-changed", έτσι ώστε να συμπληρώνεται κάθε φορά που αλλάζει η τιμή. Αυτές είναι οι μέθοδοι της κλάσης Gtk.Range.</p> 148 </item> 149 <item><p><code>add_mark(value, position, markup)</code> προσθέτει ένα σημάδι στην <code>value</code> (<code>float</code> ή <code>int</code> εάν αυτή είναι η ακρίβεια της κλίμακας), σε <code>position</code> (<code>Gtk.PositionType.LEFT, Gtk.PositionType.RIGHT, Gtk.PositionType.TOP, Gtk.PositionType.BOTTOM</code>) με κείμενο <code>Null</code> ή <code>markup</code> στη γλώσσα επισήμανσης Pango. Για καθαρισμό σημαδιών, <code>clear_marks()</code>.</p></item> 150 <item><p>Ο <code>set_digits(digits)</code> ορίζει την ακρίβεια της κλίμακας σε ψηφία <code>digits</code>.</p></item> 151 </list> 152 </section> 153 154 <section id="references"> 155 <title>Αναφορές API</title> 156 <p>Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:</p> 157 <list> 158 <item><p><link href="http://developer.gnome.org/gtk3/unstable/GtkScale.html">GtkScale</link></p></item> 159 <item><p><link href="http://developer.gnome.org/gtk3/unstable/GtkAdjustment.html">GtkAdjustment</link></p></item> 160 <item><p><link href="http://developer.gnome.org/gtk3/unstable/gtk3-Standard-Enumerations.html">Standard Enumerations</link></p></item> 161 </list> 162 </section> 163</page> 164