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