Blame platform-demos/cs/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="cs">
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>Jednoduchá implementace GMenu.</desc>
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 s jednoduchým widgetem GMenu a objekty SimpleAction

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="code">
Packit 1470ea
    <title>Kód použitý k vygenerování tohoto příkladu</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
        # Spustí aplikaci
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # Vytvoří nabídku
Packit 1470ea
        menu = Gio.Menu()
Packit 1470ea
        # Připojí do nabídky tři volby
Packit 1470ea
        menu.append("New", "app.new")
Packit 1470ea
        menu.append("About", "app.about")
Packit 1470ea
        menu.append("Quit", "app.quit")
Packit 1470ea
        # Nastaví nabídku jako aplikační nabídku
Packit 1470ea
        self.set_app_menu(menu)
Packit 1470ea
Packit 1470ea
        # Vytvoří akci pro volbu "new" v nabídce
Packit 1470ea
        new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
        # Napojí ji na funkci zpětného volání new_cb
Packit 1470ea
        new_action.connect("activate", self.new_cb)
Packit 1470ea
        # Přidá akci do aplikace
Packit 1470ea
        self.add_action(new_action)
Packit 1470ea
Packit 1470ea
        # Volba "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
        # Volba "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
    # Funkce zpětného volání pro "new"
Packit 1470ea
    def new_cb(self, action, parameter):
Packit 1470ea
        print("This does nothing. It is only a demonstration.")
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro "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
    # Funkce zpětného volání pro "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>Užitečné metody pro GSimpleAction a GMenu</title>
Packit 1470ea
Packit 1470ea
    

Na řádku 33 je signál "activate" od činnosti new_action (což není nabídka!) napojen na funkci zpětného volání new_cb() pomocí action.connect(signál, funkce zpětného volání). Podrobnější vysvětlení viz <link xref="signals-callbacks.py"/>.

Packit 1470ea
Packit 1470ea
    

Užitečné metody pro GSimpleAction:

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

K vytvoření nové akce, která je bezstavová, což znamená, že akce neuchovává stav nebo nezávisí na stavu daném akcí samotnou, použijte:

Packit 1470ea
      
Packit 1470ea
action = Gio.SimpleAction.new("název", typ_parametru)
Packit 1470ea
      

kde "název" je název akce a typ_parametru je typ parametrů, která akce přijímá při aktivaci. Může to být None nebo GLib.VariantType.new('s'), když je parametr typu string. Místo 's' můžete použít i jiné znaky popsané <link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">zde</link>. K vytvoření stavové akce použijte:

Packit 1470ea
      
Packit 1470ea
action = Gio.SimpleAction.new_stateful("název", typ_parametru, počáteční_stav)
Packit 1470ea
      

kde počáteční_stav je definován jako GVariant, například Glib.Variant.new_string("start"). Seznam možných stavů najdete <link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">zde</link>.

</item>
Packit 1470ea
      <item>

set_enabled(True) nastavuje akci jako povolenou. Akce musí být povolená, aby šla aktivovat nebo aby šel její stav změnit voláním zvenku. Mělo by být voláno jen implementátorem akce. Uživatel akce by neměl zkoušel měnit tento její příznak.

</item>
Packit 1470ea
      <item>

set_state(stav), kde stav je GVariant, nastavuje stav akce a tím aktualizuje vlastnost state na zadanou hodnotu. Mělo by být voláno jen implementátorem akce. Uživatel akce by měl při požadavku na změnu místo toho volat change_state(stav) (kde stav byl zmíně v předchozím).

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

Užitečné metody pro GMenu:

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

K vložení položky do nabídky na pozici pozice použijte insert(pozice, popisek, upřesnění_akce), kde popisek je text, který se v nabídce objeví a upřesnění_akce je složený řetězec v podobě názvu akce, před který se připojí předpona app.. Podrobnější rozebrání této záležitosti můžete najít v <link xref="menubar.py#win-app"/>.

Packit 1470ea
      

Pro připojení položky do nabídky na konec respektive na začátek použijte append(popisek, upřesnění_akce) respektive prepend(popisek, upřesnění_akce).

</item>
Packit 1470ea
      <item>

Jiným způsobem, jak přidat položky do nabídky, je vytvořit je jako widgety GMenuItem a použít insert_item(pozice, položka), append_item(položka) nebo prepend_item(položka). Takže například můžeme mít:

Packit 1470ea
      
Packit 1470ea
about = Gio.MenuItem.new("About", "app.about")
Packit 1470ea
menu.append_item(about)
Packit 1470ea
      </item>
Packit 1470ea
      <item>

Do nabídky můžeme také přidat celý pododdíl pomocí insert_section(pozice, popisek, oddíl), append_section(popisek, oddíl) nebo prepend_section(popisek, oddíl), kde popisek je název pododdílu.

</item>
Packit 1470ea
      <item>

Přidáme také celou podnabídku, která se bude rozbalovat a sbalovat, pomocí insert_submenu(pozice, popisek, oddíl), append_submenu(popisek, oddíl) nebo prepend_submenu(popisek, oddíl), kde popisek jen název pododdílu.

</item>
Packit 1470ea
      <item>

K odstranění položky z nabídky použijte remove(pozice).

</item>
Packit 1470ea
      <item>

K nastavení popisku pro nabídku použijte set_label(popisek).

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="references">
Packit 1470ea
    <title>Odkazy k API</title>
Packit 1470ea
    

V této ukázce se používá následující:

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>