Blame platform-demos/el/buttonbox.py.page

Packit 1470ea
Packit 1470ea
<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="buttonbox.py" xml:lang="el">
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">ButtonBox (Python)</title>
Packit 1470ea
    <link type="guide" xref="beginner.py#layout"/>
Packit 1470ea
    <link type="seealso" xref="button.py"/>
Packit 1470ea
    <link type="next" xref="statusbar.py"/>
Packit 1470ea
    <revision version="0.2" date="2012-08-01" status="stub"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
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
    <desc>Ένας περιέκτης για διευθέτηση κουμπιών</desc>
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>ButtonBox</title>
Packit 1470ea
Packit 1470ea
  <media type="image" mime="image/png" src="media/buttonbox_calculator.png"/>
Packit 1470ea
  

Μια αριθμομηχανή - τα κουμπιά περικλείονται σε οριζόντια ButtonBoxes.

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="code">
Packit 1470ea
    <title>Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος</title>
Packit 1470ea
    from gi.repository import Gtk
Packit 1470ea
import sys
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyWindow(Gtk.ApplicationWindow):
Packit 1470ea
Packit 1470ea
    def __init__(self, app):
Packit 1470ea
        Gtk.Window.__init__(self, title="Calculator", application=app)
Packit 1470ea
        self.set_default_size(350, 200)
Packit 1470ea
        self.set_border_width(10)
Packit 1470ea
Packit 1470ea
        # an entry
Packit 1470ea
        self.entry = Gtk.Entry()
Packit 1470ea
        # with an initial text
Packit 1470ea
        self.entry.set_text('0')
Packit 1470ea
        # text aligned on the right
Packit 1470ea
        self.entry.set_alignment(1)
Packit 1470ea
        # the text in the entry cannot be modified writing in it
Packit 1470ea
        self.entry.set_can_focus(False)
Packit 1470ea
Packit 1470ea
        # a grid
Packit 1470ea
        grid = Gtk.Grid()
Packit 1470ea
        grid.set_row_spacing(5)
Packit 1470ea
Packit 1470ea
        # to attach the entry
Packit 1470ea
        grid.attach(self.entry, 0, 0, 1, 1)
Packit 1470ea
Packit 1470ea
        # the labels for the buttons
Packit 1470ea
        buttons = [7, 8, 9, '/',
Packit 1470ea
                   4, 5, 6, '*',
Packit 1470ea
                   1, 2, 3, '-',
Packit 1470ea
                   'C', 0, '=', '+']
Packit 1470ea
Packit 1470ea
        # each row is a ButtonBox, attached to the grid
Packit 1470ea
        for i in range(4):
Packit 1470ea
            hbox = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
Packit 1470ea
            hbox.set_spacing(5)
Packit 1470ea
            grid.attach(hbox, 0, i + 1, 1, 1)
Packit 1470ea
            # each ButtonBox has 4 buttons, connected to the callback function
Packit 1470ea
            for j in range(4):
Packit 1470ea
                button = Gtk.Button(label=buttons[i * 4 + j])
Packit 1470ea
                button.set_can_focus(False)
Packit 1470ea
                button.connect("clicked", self.button_clicked)
Packit 1470ea
                hbox.add(button)
Packit 1470ea
Packit 1470ea
        # some variables for the calculations
Packit 1470ea
        self.first_number = 0
Packit 1470ea
        self.second_number = 0
Packit 1470ea
        self.counter = 0
Packit 1470ea
        self.operation = ""
Packit 1470ea
Packit 1470ea
        # add the grid to the window
Packit 1470ea
        self.add(grid)
Packit 1470ea
Packit 1470ea
    # callback function for all the buttons
Packit 1470ea
    def button_clicked(self, button):
Packit 1470ea
        # for the operations
Packit 1470ea
        if button.get_label() == '+':
Packit 1470ea
            self.counter += 1
Packit 1470ea
            if self.counter > 1:
Packit 1470ea
                self.do_operation()
Packit 1470ea
            self.entry.set_text('0')
Packit 1470ea
            self.operation = "plus"
Packit 1470ea
        elif button.get_label() == '-':
Packit 1470ea
            self.counter += 1
Packit 1470ea
            if self.counter > 1:
Packit 1470ea
                self.do_operation()
Packit 1470ea
            self.entry.set_text('0')
Packit 1470ea
            self.operation = "minus"
Packit 1470ea
        elif button.get_label() == '*':
Packit 1470ea
            self.counter += 1
Packit 1470ea
            if self.counter > 1:
Packit 1470ea
                self.do_operation()
Packit 1470ea
            self.entry.set_text('0')
Packit 1470ea
            self.operation = "multiplication"
Packit 1470ea
        elif button.get_label() == '/':
Packit 1470ea
            self.counter += 1
Packit 1470ea
            if self.counter > 1:
Packit 1470ea
                self.do_operation()
Packit 1470ea
            self.entry.set_text('0')
Packit 1470ea
            self.operation = "division"
Packit 1470ea
        # for =
Packit 1470ea
        elif button.get_label() == '=':
Packit 1470ea
            self.do_operation()
Packit 1470ea
            self.entry.set_text(str(self.first_number))
Packit 1470ea
            self.counter = 1
Packit 1470ea
        # for Cancel
Packit 1470ea
        elif button.get_label() == 'C':
Packit 1470ea
            self.first_number = 0
Packit 1470ea
            self.second_number = 0
Packit 1470ea
            self.counter = 0
Packit 1470ea
            self.entry.set_text('')
Packit 1470ea
            self.operation = ""
Packit 1470ea
        # for a digit button
Packit 1470ea
        else:
Packit 1470ea
            new_digit = int(button.get_label())
Packit 1470ea
            if self.entry.get_text() == 'error':
Packit 1470ea
                number = 0
Packit 1470ea
            else:
Packit 1470ea
                number = int(self.entry.get_text())
Packit 1470ea
            number = number * 10 + new_digit
Packit 1470ea
            if self.counter == 0:
Packit 1470ea
                self.first_number = number
Packit 1470ea
            else:
Packit 1470ea
                self.second_number = number
Packit 1470ea
            self.entry.set_text(str(number))
Packit 1470ea
Packit 1470ea
    def do_operation(self):
Packit 1470ea
        if self.operation == "plus":
Packit 1470ea
            self.first_number += self.second_number
Packit 1470ea
        elif self.operation == "minus":
Packit 1470ea
            self.first_number -= self.second_number
Packit 1470ea
        elif self.operation == "multiplication":
Packit 1470ea
            self.first_number *= self.second_number
Packit 1470ea
        elif self.operation == "division":
Packit 1470ea
            try:
Packit 1470ea
                self.first_number /= self.second_number
Packit 1470ea
            except ZeroDivisionError:
Packit 1470ea
                self.first_number = 0
Packit 1470ea
                self.second_number = 0
Packit 1470ea
                self.counter = 0
Packit 1470ea
                self.entry.set_text('error')
Packit 1470ea
                self.operation = ""
Packit 1470ea
                return
Packit 1470ea
        else:
Packit 1470ea
            self.first_number = 0
Packit 1470ea
            self.second_number = 0
Packit 1470ea
            self.counter = 0
Packit 1470ea
            self.entry.set_text('error')
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyApplication(Gtk.Application):
Packit 1470ea
Packit 1470ea
    def __init__(self):
Packit 1470ea
        Gtk.Application.__init__(self)
Packit 1470ea
Packit 1470ea
    def do_activate(self):
Packit 1470ea
        win = MyWindow(self)
Packit 1470ea
        win.show_all()
Packit 1470ea
Packit 1470ea
    def do_startup(self):
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="methods">
Packit 1470ea
    <title>Χρήσιμες μέθοδοι για ένα γραφικό στοιχείο ButtonBox</title>
Packit 1470ea
    <list>
Packit 1470ea
      <item>

Η διάταξη του ButtonBox ορίζεται με set_layout(layout), όπου layout μπορεί να είναι Gtk.ButtonBoxStyle.SPREAD (τα κουμπιά διασπείρονται εξίσου κατά μήκος του πλαισίου), Gtk.ButtonBoxStyle.EDGE (τα κουμπιά τοποθετούνται στις άκρες του πλαισίου), Gtk.ButtonBoxStyle.START (τα κουμπιά ομαδοποιούνται προς την αρχή του πλαισίου), Gtk.ButtonBoxStyle.END (τα κουμπιά ομαδοποιούνται προς το τέλος του πλαισίου), Gtk.ButtonBoxStyle.CENTER (τα κουμπιά κεντράρονται στο πλαίσιο).

</item>
Packit 1470ea
      <item>

Ο set_child_secondary(button, is_secondary) ορίζει εάν το button πρέπει να εμφανιστεί σε μια δευτερεύουσα ομάδα θυγατρικών. Μια τυπική χρήση ενός δευτερεύοντος θυγατρικού είναι το βοηθητικό κουμπί σε ένα διάλογο. Αυτή η ομάδα εμφανίζεται μετά τα άλλα θυγατρικά εάν ο τύπος είναι START, SPREAD ή EDGE και πριν τα άλλα θυγατρικά εάν ο τύπος είναι END. Εάν ο τύπος είναι START ή END, τότε τα δευτερεύοντα θυγατρικά στοιχίζονται στην άλλη άκρη του πλαισίου κουμπιού από τα κύρια θυγατρικά. Για τους άλλους τύπους, εμφανίζονται αμέσως δίπλα στα κύρια θυγατρικά.

</item>
Packit 1470ea
      <item>

Το set_child_non_homogeneous(button, is_non_homogeneous) ορίζει εάν το θυγατρικό εξαιρείται από το ομογενές μέγεθος. Προεπιλεγμένη τιμή είναι False.

</item>
Packit 1470ea
      <item>

set_spacing(spacing) ορίζει το διάκενο, σε εικονοστοιχεία, μεταξύ των κουμπιών του πλαισίου.

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

Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkButtonBox.html">GtkButtonBox</link>

</item>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkBox.html">GtkBox</link>

</item>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkButton.html">GtkButton</link>

</item>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkEntry.html">GtkEntry</link>

</item>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/stable/GtkGrid.html">GtkGrid</link>

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