Blame platform-demos/cs/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="cs">
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>Widget, který sdružuje widgety GtkMenuItem.</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>MenuBar vytvořený pomocí XML a GtkBuilder</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar.png"/>
Packit 1470ea
  

MenuBar vytvořený pomocí XML a GtkBuilder.

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="xml"> <title>Vytvoření MenuBar pomocí XML</title>
Packit 1470ea
   

Abyste vytvořili nabídkovou lištu pomocí XML:

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

Pomocí svého oblíbeného textového editoru vytvořte <file>menubar.ui</file>.

</item>
Packit 1470ea
     <item>

Na začátek souboru vložte následující řádek:

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

Chceme vytvořit rozhraní, které bude obsahovat naši nabídkovou lištu a její podnabídky. Naše nabídková lišta bude obsahovat podnabídky <gui>Soubor</gui>, <gui>Upravit</gui>, <gui>Volby</gui> a <gui>Nápověda</gui>. Do souboru přidáme následující kód 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>

Nyní vytvoříme soubor .py a použijeme GtkBuilder k naimportování souboru <file>menubar.ui</file>, který jsme před chvílí vytvořili.

</item>
Packit 1470ea
   </steps>
Packit 1470ea
   </section>
Packit 1470ea
Packit 1470ea
   <section id="basis"> <title>Přidání MenuBar do okna pomocí 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
        # Builder pro přidání uživatelského rozhraní navrženého v Glade do mřížky
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # Získá soubor (pokud existuje)
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
        # Použije metodu Gtk.Application.set_menubar(nabídková_lišta) pro přídání
Packit 1470ea
        # nabídkové lišty do aplikace (Upozornění: NE do okna!)
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

Nyní aplikaci napsanou v jazyce Python spusťte. Měla by vypadat podobně, jako na obrázku na začátku této stránky.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="xml2"> <title>Přidání položek do nabídky</title>
Packit 1470ea

Začneme přidáním dvou položek nabídky do nabídky <gui>File</gui>: <gui>New</gui> a <gui>Quit</gui>. Provedeme to přidáním oddílu s těmito položkami do podnabídky File. Soubor <file>menubar.ui</file> by měl vypadat jako tento (řádky 6 až 13 včetně obsahují nově přidaný oddíl):

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
  

Podle tohoto vzoru nyní můžete přidat položky <gui>Copy</gui> a <gui>Paste</gui> do podnabídky <gui>Edit</gui> a položku <gui>About</gui> do podnabídky <gui>Help</gui>.

Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="actions">
Packit 1470ea
    <title>Nastavení akcí</title>
Packit 1470ea
Packit 1470ea
    

Nyní vytvoříme akce pro „New“ a „Quit“ napojené na funkce zpětného volání v souboru .py. Například „new“ vytvoříme jako:

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

A vytvoříme funkci zpětného volání pro „new“ jako

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

Nyní v souboru XML napojíme položky nabídky na akce v souboru XML přidáním atributu „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
    

Všimněte si, že pro akce, které se vztahují k aplikaci, používáme předponu app. a pro akce, které se vztahují k oknu, používáme předponu win..

Packit 1470ea
Packit 1470ea
    

Nakonec v souboru <file>.py</file> přidáme akci do aplikace nebo do okna – například app.new bude přidáno do aplikace v metodě do_startup(self) jako

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

Podrobnější vysvětlení signálů a zpětných volání viz <link xref="signals-callbacks.py"/>.

Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="win-app"><title>Akce: Aplikace nebo okno?</title>
Packit 1470ea
    

Výše jsme vytvořili akce "new" a "open" jako součást třídy MyApplication. Akce, které ovládají přímo aplikaci, jako je "quit" by se vytvořily podobně.

Packit 1470ea
Packit 1470ea
    

Některé akce, jako je "copy" (kopírovat) nebo "paste" (vložit) se vztahují k oknu a ne k aplikaci. Akce okna by měly být vytvářeny jako součást třídy okna.

Packit 1470ea
Packit 1470ea
    

Soubor s celým příkladem obsahuje jak akce aplikace, tak akce okna. Akce okna jsou obvykle zároveň i součástí <link xref="gmenu.py">aplikační nabídky</link>. Není dobrým zvykem vkládat akce okna do aplikační nabídky. Pro předváděcí účely zahrnuje soubor s celým příkladem, který následuje, kód XML v souboru <file>.ui</file>, který vytvoří aplikační nabídku včetně položek "New" a "Open" a ty jsou zavěšeny na stejnou akci, jako položky nabídkové lišty se stejným názvem.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="choices">
Packit 1470ea
    <title>Podnabídka „Choices“ a položky se stavem</title>
Packit 1470ea
    <media type="image" mime="image/png" src="media/menubar_choices.png"/>
Packit 1470ea
    

Řádky 30 až 80 včetně v <link xref="menubar.py#xml-code"/> ukazují kód XML použitý k vytvoření uživatelského rozhraní pro nabídku <gui>Choices</gui>.

Packit 1470ea
Packit 1470ea
    

Dosud vytvořené akce jsou bezstavové, tj. takové, které si nepamatují stave nebo nezávisí na stavu akce samotné. Akce, které potřebujeme vytvořit pro podnabídku <gui>Choices</gui> jsou na druhou stranu stavové. Příkladem vytvoření stavové akce je:

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

kde proměnné v metodě jsou: název, typ parametru (v tomto případě řetězec, úplný seznam s významem znaků viz <link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">zde</link>), počáteční stav (v tomto případě 'line', v případě pravdivostní hodnoty True by to mělo být Glib.Variant.new_boolean(True) apod.; úplný seznam viz <link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">zde</link>).

Packit 1470ea
Packit 1470ea
    

Po vytvoření stavové jednoduché akce ji napojíme na funkci zpětného volání a přidáme ji do okna (nebo do aplikace v některých případech), stejně jako dřív:

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>Celý soubor s uživatelským rozhraním ve formátu XML pro tento příklad</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>Kompletní soubor v jazyce Python pro tento příklad</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
        # Vytvoří bezstavovou akci (název, typ parametru)
Packit 1470ea
        copy_action = Gio.SimpleAction.new("copy", None)
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        copy_action.connect("activate", self.copy_callback)
Packit 1470ea
        # Přidá ji do okna
Packit 1470ea
        self.add_action(copy_action)
Packit 1470ea
Packit 1470ea
        # Vytvoří bezstavovou akci (název, typ parametru)
Packit 1470ea
        paste_action = Gio.SimpleAction.new("paste", None)
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        paste_action.connect("activate", self.paste_callback)
Packit 1470ea
        # Přidá ji do okna
Packit 1470ea
        self.add_action(paste_action)
Packit 1470ea
Packit 1470ea
        # Vytvoří stavovou akci (název, typ_parametru, počáteční_stav)
Packit 1470ea
        shape_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "shape", GLib.VariantType.new('s'), GLib.Variant.new_string('line'))
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        shape_action.connect("activate", self.shape_callback)
Packit 1470ea
        # Přidá ji do okna
Packit 1470ea
        self.add_action(shape_action)
Packit 1470ea
Packit 1470ea
        # Vytvoří stavovou akci
Packit 1470ea
        about_action = Gio.SimpleAction.new("about", None)
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        about_action.connect("activate", self.about_callback)
Packit 1470ea
        # Přidá ji do aplikace
Packit 1470ea
        self.add_action(about_action)
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro copy_action
Packit 1470ea
    def copy_callback(self, action, parameter):
Packit 1470ea
        print("\"Copy\" activated")
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro paste_action
Packit 1470ea
    def paste_callback(self, action, parameter):
Packit 1470ea
        print("\"Paste\" activated")
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro 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
    # Funkce zpětného volání pro about (viz příklad AboutDialog)
Packit 1470ea
    def about_callback(self, action, parameter):
Packit 1470ea
        # Gtk.AboutDialog
Packit 1470ea
        aboutdialog = Gtk.AboutDialog()
Packit 1470ea
Packit 1470ea
        # Seznam autorů kódu a dokumentace (bude použit později)
Packit 1470ea
        authors = ["GNOME Documentation Team"]
Packit 1470ea
        documenters = ["GNOME Documentation Team"]
Packit 1470ea
Packit 1470ea
        # Vyplní 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
        # Napojí signál "response" na on_close, aby se zavřel 
Packit 1470ea
        # AboutDialog, když je kliknuto na "close"
Packit 1470ea
        aboutdialog.connect("response", self.on_close)
Packit 1470ea
        # Zobrazí AboutDialog
Packit 1470ea
        aboutdialog.show()
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro likvidaci 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
        # PRVNÍ, CO SE MUSÍ UDĚLAT: do_startup()
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # Vytvoří bezstavovou akci
Packit 1470ea
        new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        new_action.connect("activate", self.new_callback)
Packit 1470ea
        # Přidá ji do aplikace
Packit 1470ea
        self.add_action(new_action)
Packit 1470ea
Packit 1470ea
        # Vytvoří bezstavovou akci
Packit 1470ea
        quit_action = Gio.SimpleAction.new("quit", None)
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        quit_action.connect("activate", self.quit_callback)
Packit 1470ea
        # Přidá ji do aplikace
Packit 1470ea
        self.add_action(quit_action)
Packit 1470ea
Packit 1470ea
        # Vytvoří stavovou akci
Packit 1470ea
        state_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "state",  GLib.VariantType.new('s'), GLib.Variant.new_string('off'))
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        state_action.connect("activate", self.state_callback)
Packit 1470ea
        # Přidá ji do aplikace
Packit 1470ea
        self.add_action(state_action)
Packit 1470ea
Packit 1470ea
        # Vytvoří stavovou akci
Packit 1470ea
        awesome_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "awesome", None, GLib.Variant.new_boolean(False))
Packit 1470ea
        # Napojí ji na funkci zpětného volání
Packit 1470ea
        awesome_action.connect("activate", self.awesome_callback)
Packit 1470ea
        # Přidá ji do aplikace
Packit 1470ea
        self.add_action(awesome_action)
Packit 1470ea
Packit 1470ea
        # Builder, který přidá navrh uživatelského rozhraní z Glade do mřížky
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # Získá soubor (pokud existuje)
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
        # Použije metodu Gtk.Application.set_menubar(menubar) pro přidání
Packit 1470ea
        # nabídkové lišty a aplikační nabídky (Poznámka: NE do okna!)
Packit 1470ea
        self.set_menubar(builder.get_object("menubar"))
Packit 1470ea
        self.set_app_menu(builder.get_object("appmenu"))
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro new
Packit 1470ea
    def new_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"New\"")
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro quit
Packit 1470ea
    def quit_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Quit\"")
Packit 1470ea
        sys.exit()
Packit 1470ea
Packit 1470ea
    # Funkce zpětného volání pro 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
    # Funkce zpětného volání pro 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>Horké klávesy a klávesové zkratky</title>
Packit 1470ea
    

Popisky mohou obsahovat horké (mnemotechnické) klávesy. Mají podobu podtržených písmen v popiscích a používají se pro ovládání z klávesnice. Horké klávesy se vytváří umístěním podtržítka před příslušný znak. Například "_File" namísto "File" v atributu label v <file>menubar.ui</file>.

Packit 1470ea
   

Horké klávesy jsou vidět, když zmáčknete klávesu <key>Alt</key>. Zmáčknutím <keyseq><key>Alt</key> <key>F</key></keyseq> otevřete nabídku <gui>File</gui>.

Packit 1470ea
Packit 1470ea
    

Klávesové zkratky mohou být přidány přímo do definicí uživatelského rozhraní. Například je běžné, že aplikaci lze ukončit zmáčknutím <keyseq><key>Ctrl</key><key>Q</key></keyseq>, nebo že lze uložit soubor zmáčknutím <keyseq><key>Ctrl</key><key>S</key></keyseq>. Pro přidání klávesové zkratky do definice uživatelského rozhraní stačí akorát přidat do položky atribut "accel".

Packit 1470ea

<attribute name="accel">&lt;Primary&gt;q</attribute> vytvoří sekvenci <keyseq><key>Ctrl</key><key>Q</key></keyseq> při přidávání položky Quit. „Primary“ má zde význam klávesy <key>Ctrl</key> na počítačích PC nebo klávesy <key>⌘</key> na počítačích 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>Přeložitelné řetězce</title>
Packit 1470ea
   

Protože aplikace GNOME jsou překládány do <link href="http://l10n.gnome.org/languages/">mnoha jazyků</link>, je důležité, aby řetězce ve vaší aplikaci byly přeložitelné. U popisku to zajistíte jednoduše nastavením 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>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/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>