Blame platform-demos/fr/gmenu.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="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
      

« 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>