|
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="gmenu.py" xml:lang="el">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">GMenu (Python)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="beginner.py#menu-combo-toolbar"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="signals-callbacks.py"/>
|
|
Packit |
1470ea |
<link type="next" xref="menubutton.py"/>
|
|
Packit |
1470ea |
<revision version="0.1" date="2012-04-28" status="draft"/>
|
|
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 |
|
|
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>Μια απλή εφαρμογή του GMenuModel</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>GMenu</title>
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/gmenu.py.png"/>
|
|
Packit |
1470ea |
Μια GtkApplication με ένα απλό GMenu και SimpleActions
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<links type="section"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="code">
|
|
Packit |
1470ea |
<title>Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
from gi.repository import Gtk
|
|
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="GMenu Example", application=app)
|
|
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 |
# start the application
|
|
Packit |
1470ea |
Gtk.Application.do_startup(self)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# create a menu
|
|
Packit |
1470ea |
menu = Gio.Menu()
|
|
Packit |
1470ea |
# append to the menu three options
|
|
Packit |
1470ea |
menu.append("New", "app.new")
|
|
Packit |
1470ea |
menu.append("About", "app.about")
|
|
Packit |
1470ea |
menu.append("Quit", "app.quit")
|
|
Packit |
1470ea |
# set the menu as menu of the application
|
|
Packit |
1470ea |
self.set_app_menu(menu)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# create an action for the option "new" of the menu
|
|
Packit |
1470ea |
new_action = Gio.SimpleAction.new("new", None)
|
|
Packit |
1470ea |
# connect it to the callback function new_cb
|
|
Packit |
1470ea |
new_action.connect("activate", self.new_cb)
|
|
Packit |
1470ea |
# add the action to the application
|
|
Packit |
1470ea |
self.add_action(new_action)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# option "about"
|
|
Packit |
1470ea |
about_action = Gio.SimpleAction.new("about", None)
|
|
Packit |
1470ea |
about_action.connect("activate", self.about_cb)
|
|
Packit |
1470ea |
self.add_action(about_action)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# option "quit"
|
|
Packit |
1470ea |
quit_action = Gio.SimpleAction.new("quit", None)
|
|
Packit |
1470ea |
quit_action.connect("activate", self.quit_cb)
|
|
Packit |
1470ea |
self.add_action(quit_action)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# callback function for "new"
|
|
Packit |
1470ea |
def new_cb(self, action, parameter):
|
|
Packit |
1470ea |
print("This does nothing. It is only a demonstration.")
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# callback function for "about"
|
|
Packit |
1470ea |
def about_cb(self, action, parameter):
|
|
Packit |
1470ea |
print("No AboutDialog for you. This is only a demonstration.")
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# callback function for "quit"
|
|
Packit |
1470ea |
def quit_cb(self, action, parameter):
|
|
Packit |
1470ea |
print("You have quit.")
|
|
Packit |
1470ea |
self.quit()
|
|
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>Χρήσιμες μέθοδοι για μια GSimpleAction και ένα GMenu</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Στη γραμμή 33 το σήμα "activate" από την ενέργεια new_action (όχι το μενού!) συνδέεται με τη συνάρτηση επανάκλησης new_cb() χρησιμοποιώντας action.connect(signal, callback function) . Δείτε <link xref="signals-callbacks.py"/> για μια πιο λεπτομερή εξήγηση.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Χρήσιμες μέθοδοι για μια GSimpleAction:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Για τη δημιουργία μιας νέας ενέργειας που είναι χωρίς κατάσταση, δηλαδή, μια ενέργεια που δεν κρατά ή εξαρτάται από τη δεδομένη κατάσταση από την ίδια την ενέργεια, χρησιμοποιήστε
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
action = Gio.SimpleAction.new("name", parameter_type)
|
|
Packit |
1470ea |
όπου "name" είναι το όνομα της ενέργειας και parameter_type είναι ο τύπος των παραμέτρων που δέχεται η ενέργεια όταν ενεργοποιείται. Αυτό μπορεί να είναι None , ή GLib.VariantType.new('s') εάν η παράμετρος είναι ο τύπος str , ή στη θέση του 's' ένας χαρακτήρας όπως περιγράφεται <link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">εδώ</link>. Για τη δημιουργία μιας νέας ενέργειας με κατάσταση (δηλαδή όχι χωρίς κατάσταση), χρησιμοποιήστε
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
action = Gio.SimpleAction.new_stateful("name", parameter_type, initial_state)
|
|
Packit |
1470ea |
όπου initial_state ορίζεται ως μια GVariant - για παράδειγμα Glib.Variant.new_string('start') ; για μια λίστα δυνατοτήτων δείτε <link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">εδώ</link>. </item>
|
|
Packit |
1470ea |
<item>set_enabled(True) ορίζει την ενέργεια ως ενεργή· μια ενέργεια πρέπει να είναι ενεργή για να ενεργοποιηθεί ή για να έχει την κατάσταση της αλλαγμένη από εξωτερικές κλήσεις . Αυτό πρέπει να καλείται μόνο από την εφαρμογή της ενέργειας. Οι χρήστες της ενέργειας δεν πρέπει να προσπαθούν να τροποποιήσουν την ενεργή σημαία του. </item>
|
|
Packit |
1470ea |
<item>set_state(state) , όπου state είναι μια GVariant, που ορίζει την κατάσταση της ενέργειας, ενημερώνοντας την ιδιότητα 'state' στη δεδομένη τιμή. Αυτή πρέπει να καλείται μόνο από τον εκτελεστή της ενέργειας· Οι χρήστες της ενέργειας πρέπει να καλούν change_state(state) (όπου state είναι όπως πιο πάνω) για να ζητούν την αλλαγή. </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Χρήσιμες μέθοδοι για ένα GMenu:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Για εισαγωγή ενός στοιχείου στο μενού στη θέση position , χρησιμοποιήστε insert(position, label, detailed_action) , όπου label είναι η ετικέτα που θα εμφανιστεί στο μενού και detailed_action είναι μια συμβολοσειρά αποτελούμενη από το όνομα της ενέργειας στην οποία προτάσσουμε το πρόθεμα app. . Μια πιο λεπτομερής συζήτηση αυτού μπορεί να βρεθεί στο <link xref="menubar.py#win-app"/>.
|
|
Packit |
1470ea |
Για προσάρτηση ή πρόταξη ενός στοιχείου στο μενού χρησιμοποιήστε αντίστοιχα append(label, detailed_action) και prepend(label, detailed_action) . </item>
|
|
Packit |
1470ea |
<item>Ένας άλλος τρόπος προσθήκης στοιχείων στο μενού είναι η δημιουργία τους ως GMenuItem και η χρήση insert_item(position, item) , append_item(item) , ή prepend_item(item) ; έτσι για παράδειγμα πρέπει να έχουμε:
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
about = Gio.MenuItem.new("About", "app.about")
|
|
Packit |
1470ea |
menu.append_item(about)
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>Μπορούμε επίσης να προσθέσουμε μια ολόκληρη υποενότητα σε ένα μενού χρησιμοποιώντας insert_section(position, label, section) , append_section(label, section) , ή prepend_section(label, section) , όπου label είναι ο τίτλος της υποενότητας. </item>
|
|
Packit |
1470ea |
<item>Για να προσθέσουμε ένα υπομενού που θα επεκταθεί και θα συμπτυχθεί, χρησιμοποιήστε insert_submenu(position, label, section) , append_submenu(label, section) , ή prepend_submenu(label, section) , όπου label είναι ο τίτλος της υποενότητας. </item>
|
|
Packit |
1470ea |
<item>Για την αφαίρεση ενός στοιχείου από το μενού, χρησιμοποιήστε remove(position) . </item>
|
|
Packit |
1470ea |
<item>Για ορισμό μιας ετικέτας για το μενού, χρησιμοποιήστε set_label(label) . </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
|
|
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/gio/unstable/GMenu.html">GMenu</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GSimpleAction.html">GSimpleAction</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">GVariantType</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">GVariant</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|