|
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="fr">
|
|
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>Une implémentation simple de GMenu</desc>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Luc Rebert,</mal:name>
|
|
Packit |
1470ea |
<mal:email>traduc@rebert.name</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011</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>Alain Lojewski,</mal:name>
|
|
Packit |
1470ea |
<mal:email>allomervan@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011-2012</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>Luc Pionchon</mal:name>
|
|
Packit |
1470ea |
<mal:email>pionchon.luc@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011</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>Bruno Brouard</mal:name>
|
|
Packit |
1470ea |
<mal:email>annoa.b@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011-12</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>Luis Menina</mal:name>
|
|
Packit |
1470ea |
<mal:email>liberforce@freeside.fr</mal:email>
|
|
Packit |
1470ea |
<mal:years>2014</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 |
Une application Gtk avec un GMenu de base et des SimpleActions
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<links type="section"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="code">
|
|
Packit |
1470ea |
<title>Code utilisé pour générer cet exemple</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>Méthodes utiles pour GSimpleAction et GMenu</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
In line 33 the signal "activate" from the action new_action (not the menu!) is connected to the callback function new_cb() using action.connect(signal, callback function) . See <link xref="signals-callbacks.py"/> for a more detailed explanation.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Méthodes utiles pour GSimpleAction :
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Pour créer une nouvelle action qui est stateless, c-à-d. une action qui ne retient ni ne dépend d'un état définit par l'action elle-même, utilisez
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
action = Gio.SimpleAction.new(« nom », parameter_type)
|
|
Packit |
1470ea |
où « nom » est le nom de l'action et parameter_type est le type de paramètre que l'action reçoit quand elle est activée. Ce peut être None , ou GLib.VariantType.new('s') si le paramètre est du type str , ou au lieu de 's' , un caractère tel que décrit <link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">ici</link>.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
action = Gio.SimpleAction.new_stateful(« nom », parameter_type, initial_state)
|
|
Packit |
1470ea |
where initial_state is defined as a GVariant - for instance Glib.Variant.new_string('start') ; for a list of possibilities see <link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">here</link>. </item>
|
|
Packit |
1470ea |
<item>La méthode set_enabled(True) définit l'action à enabled ; une action doit être en position enabled pour pouvoir être activée ou pour voir son état modifié par des appels extérieurs. La fonction ne peut être appelée que par l'implémenteur de l'action. Les utilisateurs de l'action ne doivent pas tenter de modifier son drapeau enabled. </item>
|
|
Packit |
1470ea |
<item>La fonction set_state(state) , où state est une GVariant, définit l'état de l'action en mettant à jour la propriété « state » à la valeur donnée. Elle ne peut être appelée que par l'implémenteur de l'action ; par contre, les utilisateurs peuvent appeler change_state(state) (où state est une GVariant) pour demander le changement d'état. </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Méthodes utiles pour un GMenu :
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Pour insérer un élément dans le menu à la position , utilisez la méthode insert(position, label, detailed_action) , où label est l'étiquette qui s'affiche dans le menu et detailed_action est une chaîne de caractères composée du nom de l'action à laquelle vous ajoutez le préfixe app. . Pour de plus amples détails, consultez <link xref="menubar.py#win-app"/>.
|
|
Packit |
1470ea |
Pour joindre ou ajouter un élément dans le menu, utilisez respectivement les méthodes append(label, detailed_action) et prepend(label, detailed_action) . </item>
|
|
Packit |
1470ea |
<item>Une autre méthode pour ajouter des éléments au menu est de les créer comme des éléments GMenuItem et d'utiliser l'une des fonctions insert_item(position, item) , append_item(item) , ou prepend_item(item) ; par exemple :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
about = Gio.MenuItem.new("About", "app.about")
|
|
Packit |
1470ea |
menu.append_item(about)
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>Nous pouvons aussi ajouter une sous-section entière dans un menu avec insert_section(position, label, section) , append_section(label, section) , ou prepend_section(label, section) , où label est le titre de la sous-section. </item>
|
|
Packit |
1470ea |
<item>Pour ajouter un sous-menu qui va s'étendre et se contracter, utilisez l'une des méthodes insert_submenu(position, label, section) , append_submenu(label, section) , ou bien prepend_submenu(label, section) , où label est le titre du sous-menu. </item>
|
|
Packit |
1470ea |
<item>To remove an item from the menu, use remove(position) . </item>
|
|
Packit |
1470ea |
<item>Pour définir une étiquette pour le menu, utilisez la méthode set_label(label) . </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="references">
|
|
Packit |
1470ea |
<title>Références API</title>
|
|
Packit |
1470ea |
Dans cet exemple, les éléments suivants sont utilisés :
|
|
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>
|