Blame platform-demos/el/menubar.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="menubar.py" xml:lang="el">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">MenuBar (Python)</title>
Packit 1470ea
  <link type="guide" xref="beginner.py#menu-combo-toolbar"/>
Packit 1470ea
  <link type="seealso" xref="gmenu.py"/>
Packit 1470ea
    <link type="next" xref="colorbutton.py"/>
Packit 1470ea
    <revision version="0.1" date="2012-08-01" status="stub"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
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>Ένα γραφικό στοιχείο που κρατά γραφικά στοιχεία GtkMenuItem</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>Μια γραμμή μενού δημιουργήθηκε χρησιμοποιώντας XML και GtkBuilder</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar.png"/>
Packit 1470ea
  

Μια γραμμή εργαλείων δημιουργήθηκε χρησιμοποιώντας XML και GtkBuilder.

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="xml"> <title>Δημιουργήστε μια γραμμή μενού χρησιμοποιώντας XML</title>
Packit 1470ea
   

Για να δημιουργήσετε μια γραμμή μενού χρησιμοποιώντας XML:

Packit 1470ea
   <steps>
Packit 1470ea
     <item>

Δημιουργήστε <file>menubar.ui</file> χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή κειμένου.

</item>
Packit 1470ea
     <item>

Εισάγετε την επόμενη γραμμή στην κορυφή του αρχείου:

Packit 1470ea
           
Packit 1470ea
<?xml version="1.0"? encoding="UTF-8"?>
Packit 1470ea
     </item>
Packit 1470ea
    <item>

Θέλουμε να δημιουργήσουμε τη διεπαφή που θα περιέχει τη γραμμή μενού μας και τα υπομενού της. Η γραμμή μενού μας θα περιέχει τα υπομενού <gui>Αρχείο</gui>, <gui>Επεξεργασία</gui>, <gui>Επιλογές</gui> και <gui>Βοήθεια</gui>. Προσθέτουμε τον ακόλουθο κώδικα XML στο αρχείο:

Packit 1470ea
    <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
     </item>
Packit 1470ea
     <item>

Τώρα θα δημιουργήσουμε το αρχείο .py και θα χρησιμοποιήσουμε GtkBuilder για εισαγωγή του <file>menubar.ui</file> που μόλις δημιουργήσαμε.

</item>
Packit 1470ea
   </steps>
Packit 1470ea
   </section>
Packit 1470ea
Packit 1470ea
   <section id="basis"> <title>Προσθέστε τη MenuBar στο παράθυρο χρησιμοποιώντας GtkBuilder</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="MenuBar Example", application=app)
Packit 1470ea
        self.set_default_size(200, 200)
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
        # a builder to add the UI designed with Glade to the grid:
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # get the file (if it is there)
Packit 1470ea
        try:
Packit 1470ea
            builder.add_from_file("menubar_basis.ui")
Packit 1470ea
        except:
Packit 1470ea
            print("file not found")
Packit 1470ea
            sys.exit()
Packit 1470ea
Packit 1470ea
        # we use the method Gtk.Application.set_menubar(menubar) to add the menubar
Packit 1470ea
        # to the application (Note: NOT the window!)
Packit 1470ea
        self.set_menubar(builder.get_object("menubar"))
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea

Τώρα εκτελέστε την εφαρμογή python. Θα πρέπει να μοιάζει με την εικόνα στην κορυφή αυτής της σελίδας.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="xml2"> <title>Προσθήκη στοιχείων στα μενού</title>
Packit 1470ea

Ξεκινάμε προσθέτοντας 2 στοιχεία μενού στο μενού <gui>αρχείο</gui>: <gui>νέο</gui> και <gui>κλείσιμο</gui>. Τι κάνουμε αυτό προσθέτοντας μια section στο υπομενού File με αυτά τα στοιχεία. Το <file>menubar.ui</file> πρέπει να φαίνεται σαν αυτό (γραμμές 6 έως 13 συμπεριλαμβανόμενης αποτελούν τη νέα ενότητα που προστέθηκε):

Packit 1470ea
Packit 1470ea
   <listing>
Packit 1470ea
      <title>menubar.ui</title>
Packit 1470ea
      
Packit 1470ea
<?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name ="label">Quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
</listing>
Packit 1470ea
Packit 1470ea
  

Ακολουθώντας αυτό το μοτίβο, μπορείτε τώρα να προσθέσετε ένα στοιχείο Copy και ένα Paste στο υπομενού Edit και ένα στοιχείο About στο υπομενού Help.

Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="actions">
Packit 1470ea
    <title>Εγκατάσταση ενεργειών</title>
Packit 1470ea
Packit 1470ea
    

Τώρα δημιουργούμε τις ενέργειες για "New" και "Quit" συνδεμένες σε μια συνάρτηση επανάκλησης στο αρχείο Python· για παράδειγμα δημιουργούμε το "new" ως:

Packit 1470ea
    
Packit 1470ea
new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
new_action.connect("activate", self.new_callback)
Packit 1470ea
Packit 1470ea
    

Και δημιουργούμε τη συνάρτηση επανάκλησης του "new" ως

Packit 1470ea
    
Packit 1470ea
def new_callback(self, action, parameter):
Packit 1470ea
    print "You clicked \"New\""
Packit 1470ea
Packit 1470ea
    

Τώρα, στο αρχείο XML, συνδέουμε τα στοιχεία του μενού στις ενέργειες του αρχείου XML προσθέτοντας το γνώρισμα "action":

Packit 1470ea
    
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">New</attribute>
Packit 1470ea
  <attribute name="action">app.new</attribute>
Packit 1470ea
</item>
Packit 1470ea
Packit 1470ea
    

Σημειώστε ότι για μια ενέργεια που είναι σχετική με την εφαρμογή, χρησιμοποιούμε το πρόθεμα app.· για ενέργειες που είναι σχετικές με το παράθυρο χρησιμοποιούμε το πρόθεμα win..

Packit 1470ea
Packit 1470ea
    

Τελικά, στο αρχείο Python, προσθέτουμε την ενέργεια στην εφαρμογή ή στο παράθυρο - έτσι για παράδειγμα app.new θα προστεθεί στην εφαρμογή στη μέθοδο do_startup(self) ως

Packit 1470ea
    
Packit 1470ea
self.add_action(new_action)
Packit 1470ea
Packit 1470ea
    

Δείτε <link xref="signals-callbacks.py"/> για μια πιο λεπτομερή εξήγηση των σημάτων και επανακλήσεων.

Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="win-app"><title>Ενέργειες: εφαρμογή ή παράθυρο;</title>
Packit 1470ea
    

Πιο πάνω, δημιουργήσαμε τις ενέργειες "new" και "open" ως μέρος της κλάσης MyApplication. Οι ενέργειες που ελέγχουν την ίδια την εφαρμογή, όπως "quit" πρέπει να δημιουργηθούν παρόμοια.

Packit 1470ea
Packit 1470ea
    

Μερικές ενέργειες, όπως "copy" και "paste" αντιμετωπίζουν το παράθυρο, όχι την εφαρμογή. Οι ενέργειες παραθύρου πρέπει να δημιουργηθούν ως μέρος της κλάσης παραθύρου.

Packit 1470ea
Packit 1470ea
    

Τα πλήρη αρχεία του παραδείγματος περιέχουν και τις ενέργειες εφαρμογής και παραθύρου. Οι ενέργειες παραθύρου είναι αυτές που συνήθως συμπεριλαμβάνονται στο <link xref="gmenu.py">μενού εφαρμογής</link>. Δεν είναι καλή πρακτική να συμπεριλαμβάνετε ενέργειες παραθύρου στο μενού της εφαρμογής. Για σκοπούς επίδειξης, τα πλήρη αρχεία του παραδείγματος που ακολουθεί περιέχουν XML στο αρχείο UI που δημιουργεί το μενού εφαρμογής που περιλαμβάνει τα στοιχεία "New" και "Open" και αυτά συνδέονται με τις ίδιες ενέργειες όπως τα στοιχεία της γραμμής μενού του ίδιου ονόματος.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="choices">
Packit 1470ea
    <title>Επιλογές υπομενού και στοιχείων με κατάσταση</title>
Packit 1470ea
    <media type="image" mime="image/png" src="media/menubar_choices.png"/>
Packit 1470ea
    

Οι γραμμές 30 έως 80 συμπεριλαμβανόμενης της εμφάνισης <link xref="menubar.py#xml-code"/> του χρησιμοποιούμενου κώδικα XML για δημιουργία της UI για το μενού <gui>επιλογές</gui>.

Packit 1470ea
Packit 1470ea
    

Οι δημιουργημένες ενέργειες μέχρι εδώ είναι χωρίς κατάσταση, δηλαδή δεν κρατούν ή εξαρτώνται από μια δεδομένη κατάσταση από την ίδια την ενέργεια. Οι ενέργειες που χρειαζόμαστε να δημιουργήσουμε για το υπομενού επιλογών, από την άλλη μεριά, είναι με κατάσταση. Ένα παράδειγμα δημιουργίας μιας ενέργειας με κατάσταση είναι:

Packit 1470ea
    
Packit 1470ea
shape_action = Gio.SimpleAction.new_stateful("shape", GLib.VariantType.new('s'), GLib.Variant.new_string('line'))
Packit 1470ea
Packit 1470ea
    

όπου οι μεταβλητές της μεθόδου είναι: όνομα, τύπος παραμέτρου (σε αυτήν την περίπτωση, μια συμβολοσειρά - δείτε <link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">εδώ</link> για μια πλήρη λίστα σημασιών χαρακτήρα), αρχικής κατάστασης (σε αυτήν την περίπτωση, 'line' - σε περίπτωση μιας True τιμής Μπουλ θα πρέπει να είναι Glib.Variant.new_boolean(True), κ.ο.κ, δείτε <link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">εδώ</link> για μια πλήρη λίστα)

Packit 1470ea
Packit 1470ea
    

Μετά τη δημιουργία της SimpleAction με κατάσταση τη συνδέουμε στη συνάρτηση επανάκλησης και την προσθέτουμε στο παράθυρο (ή την εφαρμογή, εάν είναι η περίπτωση), όπως πριν:

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
shape_action.connect("activate", self.shape_callback)
Packit 1470ea
self.add_action(shape_action)
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="xml-code">
Packit 1470ea
    <title>Πλήρες αρχείο UI XML για αυτό το παράδειγμα</title>
Packit 1470ea
    <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
          <attribute name="action">app.new</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Quit</attribute>
Packit 1470ea
          <attribute name="action">app.quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Copy</attribute>
Packit 1470ea
          <attribute name="action">win.copy</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Paste</attribute>
Packit 1470ea
          <attribute name="action">win.paste</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
      <submenu>
Packit 1470ea
        <attribute name="label">Shapes</attribute>
Packit 1470ea
          <section>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Line</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">line</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Triangle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">triangle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Square</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">square</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Polygon</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">polygon</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Circle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">circle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
          </section>
Packit 1470ea
      </submenu>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">On</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">on</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Off</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">off</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Awesome</attribute>
Packit 1470ea
          <attribute name="action">app.awesome</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">About</attribute>
Packit 1470ea
          <attribute name="action">win.about</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
  <menu id="appmenu">
Packit 1470ea
    <section>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">New</attribute>
Packit 1470ea
        <attribute name="action">app.new</attribute>
Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">Quit</attribute>
Packit 1470ea
        <attribute name="action">app.quit</attribute>
Packit 1470ea
      </item>
Packit 1470ea
    </section>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="python-code">
Packit 1470ea
    <title>Το πλήρες αρχείο Python για αυτό το παράδειγμα</title>
Packit 1470ea
    from gi.repository import Gtk
Packit 1470ea
from gi.repository import GLib
Packit 1470ea
from gi.repository import Gio
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="MenuBar Example", application=app)
Packit 1470ea
        self.set_default_size(200, 200)
Packit 1470ea
Packit 1470ea
        # action without a state created (name, parameter type)
Packit 1470ea
        copy_action = Gio.SimpleAction.new("copy", None)
Packit 1470ea
        # connected with the callback function
Packit 1470ea
        copy_action.connect("activate", self.copy_callback)
Packit 1470ea
        # added to the window
Packit 1470ea
        self.add_action(copy_action)
Packit 1470ea
Packit 1470ea
        # action without a state created (name, parameter type)
Packit 1470ea
        paste_action = Gio.SimpleAction.new("paste", None)
Packit 1470ea
        # connected with the callback function
Packit 1470ea
        paste_action.connect("activate", self.paste_callback)
Packit 1470ea
        # added to the window
Packit 1470ea
        self.add_action(paste_action)
Packit 1470ea
Packit 1470ea
        # action with a state created (name, parameter type, initial state)
Packit 1470ea
        shape_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "shape", GLib.VariantType.new('s'), GLib.Variant.new_string('line'))
Packit 1470ea
        # connected to the callback function
Packit 1470ea
        shape_action.connect("activate", self.shape_callback)
Packit 1470ea
        # added to the window
Packit 1470ea
        self.add_action(shape_action)
Packit 1470ea
Packit 1470ea
        # action with a state created
Packit 1470ea
        about_action = Gio.SimpleAction.new("about", None)
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        about_action.connect("activate", self.about_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(about_action)
Packit 1470ea
Packit 1470ea
    # callback function for copy_action
Packit 1470ea
    def copy_callback(self, action, parameter):
Packit 1470ea
        print("\"Copy\" activated")
Packit 1470ea
Packit 1470ea
    # callback function for paste_action
Packit 1470ea
    def paste_callback(self, action, parameter):
Packit 1470ea
        print("\"Paste\" activated")
Packit 1470ea
Packit 1470ea
    # callback function for shape_action
Packit 1470ea
    def shape_callback(self, action, parameter):
Packit 1470ea
        print("Shape is set to", parameter.get_string())
Packit 1470ea
        # Note that we set the state of the action!
Packit 1470ea
        action.set_state(parameter)
Packit 1470ea
Packit 1470ea
    # callback function for about (see the AboutDialog example)
Packit 1470ea
    def about_callback(self, action, parameter):
Packit 1470ea
        # a  Gtk.AboutDialog
Packit 1470ea
        aboutdialog = Gtk.AboutDialog()
Packit 1470ea
Packit 1470ea
        # lists of authors and documenters (will be used later)
Packit 1470ea
        authors = ["GNOME Documentation Team"]
Packit 1470ea
        documenters = ["GNOME Documentation Team"]
Packit 1470ea
Packit 1470ea
        # we fill in the aboutdialog
Packit 1470ea
        aboutdialog.set_program_name("MenuBar Example")
Packit 1470ea
        aboutdialog.set_copyright(
Packit 1470ea
            "Copyright \xc2\xa9 2012 GNOME Documentation Team")
Packit 1470ea
        aboutdialog.set_authors(authors)
Packit 1470ea
        aboutdialog.set_documenters(documenters)
Packit 1470ea
        aboutdialog.set_website("http://developer.gnome.org")
Packit 1470ea
        aboutdialog.set_website_label("GNOME Developer Website")
Packit 1470ea
Packit 1470ea
        # to close the aboutdialog when "close" is clicked we connect the
Packit 1470ea
        # "response" signal to on_close
Packit 1470ea
        aboutdialog.connect("response", self.on_close)
Packit 1470ea
        # show the aboutdialog
Packit 1470ea
        aboutdialog.show()
Packit 1470ea
Packit 1470ea
    # a callback function to destroy the aboutdialog
Packit 1470ea
    def on_close(self, action, parameter):
Packit 1470ea
        action.destroy()
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
        # FIRST THING TO DO: do_startup()
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # action without a state created
Packit 1470ea
        new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        new_action.connect("activate", self.new_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(new_action)
Packit 1470ea
Packit 1470ea
        # action without a state created
Packit 1470ea
        quit_action = Gio.SimpleAction.new("quit", None)
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        quit_action.connect("activate", self.quit_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(quit_action)
Packit 1470ea
Packit 1470ea
        # action with a state created
Packit 1470ea
        state_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "state",  GLib.VariantType.new('s'), GLib.Variant.new_string('off'))
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        state_action.connect("activate", self.state_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(state_action)
Packit 1470ea
Packit 1470ea
        # action with a state created
Packit 1470ea
        awesome_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "awesome", None, GLib.Variant.new_boolean(False))
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        awesome_action.connect("activate", self.awesome_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(awesome_action)
Packit 1470ea
Packit 1470ea
        # a builder to add the UI designed with Glade to the grid:
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # get the file (if it is there)
Packit 1470ea
        try:
Packit 1470ea
            builder.add_from_file("menubar.ui")
Packit 1470ea
        except:
Packit 1470ea
            print("file not found")
Packit 1470ea
            sys.exit()
Packit 1470ea
Packit 1470ea
        # we use the method Gtk.Application.set_menubar(menubar) to add the menubar
Packit 1470ea
        # and the menu to the application (Note: NOT the window!)
Packit 1470ea
        self.set_menubar(builder.get_object("menubar"))
Packit 1470ea
        self.set_app_menu(builder.get_object("appmenu"))
Packit 1470ea
Packit 1470ea
    # callback function for new
Packit 1470ea
    def new_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"New\"")
Packit 1470ea
Packit 1470ea
    # callback function for quit
Packit 1470ea
    def quit_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Quit\"")
Packit 1470ea
        sys.exit()
Packit 1470ea
Packit 1470ea
    # callback function for state
Packit 1470ea
    def state_callback(self, action, parameter):
Packit 1470ea
        print("State is set to", parameter.get_string())
Packit 1470ea
        action.set_state(parameter)
Packit 1470ea
Packit 1470ea
    # callback function for awesome
Packit 1470ea
    def awesome_callback(self, action, parameter):
Packit 1470ea
        action.set_state(GLib.Variant.new_boolean(not action.get_state()))
Packit 1470ea
        if action.get_state().get_boolean() is True:
Packit 1470ea
            print("You checked \"Awesome\"")
Packit 1470ea
        else:
Packit 1470ea
            print("You unchecked \"Awesome\"")
Packit 1470ea
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="mnemonics-and-accelerators"><title>Μνημονικές και επιταχυντές</title>
Packit 1470ea
    

Οι ετικέτες μπορεί να περιέχουν μνημονικούς κανόνες. Οι μνημονικοί είναι υπογραμμισμένοι χαρακτήρες στην ετικέτα, χρησιμοποιούμενοι για περιήγηση πληκτρολογίου. Οι μνημονικοί δημιουργούνται τοποθετώντας μια υπογράμμιση πριν τον μνημονικό χαρακτήρα. Για παράδειγμα "_File" αντί για απλά "File" στο γνώρισμα ετικέτας menubar.ui.

Packit 1470ea
   

Οι μνημονικοί είναι ορατοί όταν πατάτε το πλήκτρο <key>Alt</key>. Πατώντας <keyseq><key>Alt</key><key>F</key></keyseq> θα ανοίξει το μενού <gui>αρχείο</gui>.

Packit 1470ea
Packit 1470ea
    

Οι επιταχυντές μπορούν να προστεθούν ρητά στους ορισμούς UI. Για παράδειγμα, είναι κοινό να μπορείτε να κλείσετε μια εφαρμογή πατώντας <keyseq><key>Ctrl</key><key>Q</key></keyseq> ή να αποθηκεύσετε ένα αρχείο πατώντας <keyseq><key>Ctrl</key><key>S</key></keyseq>. Για την προσθήκη ενός επιταχυντή στον ορισμό της UI, χρειάζεστε απλά να προσθέσετε ένα γνώρισμα "accel" στο στοιχείο.

Packit 1470ea

Το <attribute name="accel">&lt;Primary&gt;q</attribute> θα δημιουργήσει την αλληλουχία <keyseq><key>Ctrl</key><key>Q</key></keyseq> όταν προστίθεται στο στοιχείο ετικέτας 'Εξοδος. Εδώ, το "Primary" αναφέρεται στο πλήκτρο <key>Ctrl</key> σε ένα προσωπικό υπολογιστή ή στο πλήκτρο <key>⌘</key> σε ένα Mac.

Packit 1470ea
Packit 1470ea
  
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">_Quit</attribute>
Packit 1470ea
  <attribute name="action">app.quit</attribute>
Packit 1470ea
  <attribute name="accel">&lt;Primary&gt;q</attribute>
Packit 1470ea
</item>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="translatable"><title>Μεταφράσιμες συμβολοσειρές</title>
Packit 1470ea
   

Επειδή οι εφαρμογές GNOME μεταφράζονται σε <link href="http://l10n.gnome.org/languages/">πολλές γλώσσες</link>, είναι σημαντικό ότι οι συμβολοσειρές στην εφαρμογή σας είναι μεταφράσιμες. Για να κάνετε μια ετικέτα μεταφράσιμη, απλά βάλτε translatable="yes":

Packit 1470ea
Packit 1470ea
     <attribute name="label" translatable="yes">Quit</attribute>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
  <section id="references">
Packit 1470ea
    <title>Αναφορές API</title>
Packit 1470ea
    

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

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

<link href="http://developer.gnome.org/gio/unstable/GSimpleAction.html">GSimpleAction</link>

</item>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkBuilder.html">GtkBuilder</link>

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