Blame platform-demos/cs/toolbar_builder.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="toolbar_builder.py" xml:lang="cs">
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">Nástrojová lišta vytvořená pomocí Glade (Python)</title>
Packit 1470ea
    <link type="guide" xref="beginner.py#menu-combo-toolbar"/>
Packit 1470ea
    <link type="seealso" xref="toolbar.py"/>
Packit 1470ea
    <link type="seealso" xref="grid.py"/>
Packit 1470ea
    <link type="next" xref="menubar.py"/>
Packit 1470ea
    <revision version="0.1" date="2012-07-17" 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 edit">
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
    <credit type="author copyright">
Packit 1470ea
      <name>Sebastian Pölsterl</name>
Packit 1470ea
      <email its:translate="no">sebp@k-d-w.org</email>
Packit 1470ea
      <years>2011</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Lišta s tlačítky a dalšími widgety</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Toolbar (vytvořený pomocí Glade)</title>
Packit 1470ea
Packit 1470ea
  <media type="image" mime="image/png" src="media/toolbar.png"/>
Packit 1470ea
  

Tento příklad je podobný příkladu <link xref="toolbar.py"/> s tím rozdílem, že k vytvoření nástrojové lišty v souboru .ui ve formátu XML použijeme návrhář Glade.

Packit 1470ea
Packit 1470ea
<links type="sections"/>
Packit 1470ea
Packit 1470ea
<section id="glade">
Packit 1470ea
<title>Vytvoření nástrojové lišty pomocí Glade</title>
Packit 1470ea
  

Když chcete vytvořit nástrojovou lištu pomocí <link href="http://glade.gnome.org/">návrháře rozhraní Glade</link>:

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

Otevřete Glade a uložte soubor jako <file>toolbar_builder.ui</file>.

Packit 1470ea
          

<media type="image" src="media/glade_ui.png" width="900">Snímek obrazovky s uživatelským rozhraním Glade</media>

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

V <gui>Kontejnerech</gui> na levé straně klikněte pravým tlačítkem na ikonu nástrojové lišty a vyberte <gui>Přidat widget do nejvyšší úrovně</gui>.

Packit 1470ea
          

<media type="image" src="media/glade_select_toolbar.png">Snímek obrazovky s ikonou nástrojové lišty v uživatelském rozhraní Glade</media>

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

Na kartě <gui>Obecné</gui> vpravo dole změňte <gui>Název</gui> na <input>toolbar</input> a <gui>Zobrazovat šipku</gui> na <gui>Ne</gui>.

Packit 1470ea
          

<media type="image" src="media/glade_toolbar_general.png">Snímek obrazovky s kartou Obecné</media>

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

Na kartě <gui>Běžné</gui> nastavte <gui>Roztáhnout vodorovně</gui> na <gui>Ano</gui>.

Packit 1470ea
         

<media type="image" src="media/glade_toolbar_common.png">Snímek obrazovky s kartou Běžné</media>

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

Klikněte pravým tlačítkem na „toolbar“ vpravo nahoře a vyberte <gui>Upravit</gui>. Objeví se okno <gui>Editor nástrojové lišty</gui>.

Packit 1470ea
         

<media type="image" src="media/glade_toolbar_edit.png">Snímek obrazovky, na kterém je kliknuto pravým tlačítkem kvůli úpravě nástrojové lišty</media>

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

Chceme přidat 5 tlačítek ToolButton: „New“, „Open“, „Undo“, „Fullscreen“ a „Leave Fullscreen“. Nejprve přidáme ToolButton „New“.

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

Na kartě <gui>Hierarchie</gui> klikněte na <gui>Přidat</gui>.

</item>
Packit 1470ea
       <item>

Změňte název „toolbutton1“ na „new_button“.

</item>
Packit 1470ea
       <item>

Posuňte se dolů a nastavte <gui>Je důležitá</gui> na <gui>Ano</gui>. To způsobí, že když je zobrazena nástrojová lišta, bude nástrojovém tlačítku zobrazen popisek.

</item>
Packit 1470ea
       <item>

Zadejte <gui>Název akce</gui>: <input>app.new</input>.

</item>
Packit 1470ea
       <item>

Změňte <gui>Popisek</gui> na <input>New</input>.

</item>
Packit 1470ea
       <item>

V rozbalovacím seznamu zvolte <gui>New</gui> jako <gui>Standadní ID</gui> nebo napište <input>gtk-new</input>.

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

Opakujte předchozí kroky pro zbývající tlačítka ToolButton s následujícími vlastnostmi:

Packit 1470ea
  
Packit 1470ea
    
Packit 1470ea
      
Packit 1470ea
        

Name

Packit 1470ea
        

Je důležitá

Packit 1470ea
        

Název akce

Packit 1470ea
        

Label

Packit 1470ea
        

Standardní ID

Packit 1470ea
      
Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

open_button

Packit 1470ea
      

Ano

Packit 1470ea
      

app.open

Packit 1470ea
      

Open

Packit 1470ea
      

gtk-open

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

undo_button

Packit 1470ea
      

Ano

Packit 1470ea
      

win.undo

Packit 1470ea
      

Undo

Packit 1470ea
      

gtk-undo

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

fullscreen_button

Packit 1470ea
      

Ano

Packit 1470ea
      

win.fullscreen

Packit 1470ea
      

Fullscreen

Packit 1470ea
      

gtk-fullscreen

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
      

leave_fullscreen_button

Packit 1470ea
      

Ano

Packit 1470ea
      

win.fullscreen

Packit 1470ea
      

Leave Fullscreen

Packit 1470ea
      

gtk-leave-fullscreen

Packit 1470ea
    
Packit 1470ea
    
Packit 1470ea
Packit 1470ea
          <media type="image" src="media/glade_toolbar_editor.png">
Packit 1470ea
Packit 1470ea
          </media>
Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Zavřete <gui>Editor panelu nástrojů</gui>.

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

Když svůj program spustíte, nechcete aby bylo zobrazené nástrojové tlačítko <gui>Leave Fullscreen</gui>, protože aplikace není v režimu celé obrazovky. Můžete to nastavit na kartě <gui>Běžné</gui>, kde přepnete vlastnost <gui>Viditelný</gui> na <gui>Ne</gui>. Nástrojové tlačítko sice bude pořád viditelné v návrháři rozhraní, ale po načtení do vašeho programu se bude chovat podle očekávání. Upozorňujeme, že jakékoliv použití metody show_all() by toto nastavení přepsalo, takže v celém kódu musíme používat show() zvlášť pro každý prvek.

Packit 1470ea
          

<media type="image" src="media/glade_visible_no.png">Nastavení vlastnosti Viditelná na Ne</media>

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

Uložte svoji práci a zavřete Glade.

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

Soubor XML vytvořený v <app>Glade</app> je zobrazen níže. Jedná se o popis nástrojové lišty. V době, kdy bylo toto psáno, neexistovala v uživatelském rozhraní <app>Glade</app> volba pro přidání třídy Gtk.STYLE_CLASS_PRIMARY_TOOLBAR. Můžeme ji ale do souboru XML přidat ručně. Udělá se to přidáním následujícího kódu XML na řádek 9 v <file>toolbar_builder.ui</file>:

Packit 1470ea
   
Packit 1470ea
  <style>
Packit 1470ea
     <class name="primary-toolbar"/>
Packit 1470ea
  </style>
Packit 1470ea
  
Packit 1470ea
  

Pokud tuto část nepřidáte, bude program i tak fungovat dobře. Akorát výsledná nástrojová lišty bude vypadat lehce odlišně než ta na snímku obrazovky na začátku této stránky.

Packit 1470ea
   </item>
Packit 1470ea
</steps>
Packit 1470ea
  <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <!-- interface-requires gtk+ 3.0 -->
Packit 1470ea
  <object class="GtkToolbar" id="toolbar">
Packit 1470ea
    <property name="visible">True</property>
Packit 1470ea
    <property name="can_focus">False</property>
Packit 1470ea
    <property name="hexpand">True</property>
Packit 1470ea
    <property name="show_arrow">False</property>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="new_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">app.new</property>
Packit 1470ea
        <property name="label" translatable="yes">New</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-new</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="open_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">app.open</property>
Packit 1470ea
        <property name="label" translatable="yes">Open</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-open</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="undo_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.undo</property>
Packit 1470ea
        <property name="label" translatable="yes">Undo</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-undo</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="fullscreen_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="visible">True</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.fullscreen</property>
Packit 1470ea
        <property name="label" translatable="yes">Fullscreen</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-fullscreen</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
    <child>
Packit 1470ea
      <object class="GtkToolButton" id="leave_fullscreen_button">
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="can_focus">False</property>
Packit 1470ea
        <property name="use_action_appearance">False</property>
Packit 1470ea
        <property name="is_important">True</property>
Packit 1470ea
        <property name="action_name">win.fullscreen</property>
Packit 1470ea
        <property name="label" translatable="yes">Leave Fullscreen</property>
Packit 1470ea
        <property name="use_underline">True</property>
Packit 1470ea
        <property name="stock_id">gtk-leave-fullscreen</property>
Packit 1470ea
      </object>
Packit 1470ea
      <packing>
Packit 1470ea
        <property name="expand">False</property>
Packit 1470ea
        <property name="homogeneous">True</property>
Packit 1470ea
      </packing>
Packit 1470ea
    </child>
Packit 1470ea
  </object>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
Packit 1470ea
</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
  

Nyní vytvoříme kód zobrazený níže, který přidá nástrojovou lištu ze souboru, který jsme právě vytvořili.

Packit 1470ea
from gi.repository import Gtk
Packit 1470ea
from gi.repository import Gdk
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="Toolbar Example", application=app)
Packit 1470ea
        self.set_default_size(400, 200)
Packit 1470ea
Packit 1470ea
        # Mřížka pro připojení nástrojové lišty (viz dále)
Packit 1470ea
        grid = Gtk.Grid()
Packit 1470ea
        self.add(grid)
Packit 1470ea
        # Musí zobrazit mřížku (a tím nástrojovou lištu) pomocí show(),
Packit 1470ea
        # protože show_all() by zobrazilo a tlačítka na liště, která ale
Packit 1470ea
        # chceme skrytá (kvůli tlačítku leave_fullscreen)
Packit 1470ea
        grid.show()
Packit 1470ea
Packit 1470ea
        # Builder pro přidání návrhu uživatelského rozhraní navrženého
Packit 1470ea
        # 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("toolbar_builder.ui")
Packit 1470ea
        except:
Packit 1470ea
            print("file not found")
Packit 1470ea
            sys.exit()
Packit 1470ea
        # A připojí jej do mřížky
Packit 1470ea
        grid.attach(builder.get_object("toolbar"), 0, 0, 1, 1)
Packit 1470ea
Packit 1470ea
        # Dvě tlačítka, která budo použita později v metodě
Packit 1470ea
        self.fullscreen_button = builder.get_object("fullscreen_button")
Packit 1470ea
        self.leave_fullscreen_button = builder.get_object(
Packit 1470ea
            "leave_fullscreen_button")
Packit 1470ea
Packit 1470ea
        # Vytvoří akce, které ovládají okno, napojí jejich signály na metodu
Packit 1470ea
        # zpětného volání (viz dále), přidá akce do okna:
Packit 1470ea
Packit 1470ea
        # Akce "undo"
Packit 1470ea
        undo_action = Gio.SimpleAction.new("undo", None)
Packit 1470ea
        undo_action.connect("activate", self.undo_callback)
Packit 1470ea
        self.add_action(undo_action)
Packit 1470ea
Packit 1470ea
        # Akce "fullscreen"
Packit 1470ea
        fullscreen_action = Gio.SimpleAction.new("fullscreen", None)
Packit 1470ea
        fullscreen_action.connect("activate", self.fullscreen_callback)
Packit 1470ea
        self.add_action(fullscreen_action)
Packit 1470ea
Packit 1470ea
    # Zpětné volání pro "undo"
Packit 1470ea
    def undo_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Undo\".")
Packit 1470ea
Packit 1470ea
    # Zpětné volání pro "fullscreen"
Packit 1470ea
    def fullscreen_callback(self, action, parameter):
Packit 1470ea
        # Zkontroluje, jestli je stav stejný jako Gdk.WindowState.FULLSCREEN,
Packit 1470ea
        # což je bitový příznak
Packit 1470ea
        is_fullscreen = self.get_window().get_state(
Packit 1470ea
        ) & Gdk.WindowState.FULLSCREEN != 0
Packit 1470ea
        if is_fullscreen:
Packit 1470ea
            self.unfullscreen()
Packit 1470ea
            self.leave_fullscreen_button.hide()
Packit 1470ea
            self.fullscreen_button.show()
Packit 1470ea
        else:
Packit 1470ea
            self.fullscreen()
Packit 1470ea
            self.fullscreen_button.hide()
Packit 1470ea
            self.leave_fullscreen_button.show()
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
        # Zobrazí okno pomocí show(), ne show_all(), protože to by zobrazilo
Packit 1470ea
        # také tlačítko leave_fullscreen
Packit 1470ea
        win.show()
Packit 1470ea
Packit 1470ea
    def do_startup(self):
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # Akce, které ovládají aplikace: vytvoří je, napojí jejich signály na
Packit 1470ea
        # metody zpětného volání (viz dále), přidá akce do aplikace
Packit 1470ea
Packit 1470ea
        # Akce "new"
Packit 1470ea
        new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
        new_action.connect("activate", self.new_callback)
Packit 1470ea
        app.add_action(new_action)
Packit 1470ea
Packit 1470ea
        # Akce "open"
Packit 1470ea
        open_action = Gio.SimpleAction.new("open", None)
Packit 1470ea
        open_action.connect("activate", self.open_callback)
Packit 1470ea
        app.add_action(open_action)
Packit 1470ea
Packit 1470ea
    # Zpětné volání pro "new"
Packit 1470ea
    def new_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"New\".")
Packit 1470ea
Packit 1470ea
    # Zpětné volání pro "open"
Packit 1470ea
    def open_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Open\".")
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="methods">
Packit 1470ea
<title>Užitečné metody pro Gtk.Builder</title>
Packit 1470ea

Na užitečné metody pro widget Toolbar se podívejte do kapitoly <link xref="toolbar.py"/>

Packit 1470ea
Packit 1470ea

Gtk.Builder sestaví uživatelské rozhraní z definice ve formátu XML.

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

add_from_file(název_souboru) načte a zpracuje zadaný soubor a sloučí jej s aktuálním obsahem v Gtk.Builder.

</item>
Packit 1470ea
<item>

add_from_string(řetězec) zpracuje zadaný řetězec a sloučí jej s aktuálním obsahem v Gtk.Builder.

</item>
Packit 1470ea
<item>

add_objects_from_file(název_souboru, id_objektů) je stejná jako add_from_file(), akorát že načte jen objekty, jejichž ID je uvedeno v seznamu id_objektů.

</item>
Packit 1470ea
<item>

add_objects_from_string(řetězec, id_objektů) je stejná jako add_from_string(), akorát že načte jen objekty, jejichž ID je uvedeno v seznamu id_objektů.

</item>
Packit 1470ea
<item>

get_object(id_objektu) získá widget s ID id_objektu ze seznamu načtených objektů v Gtk.Builder.

</item>
Packit 1470ea
<item>

get_objects() vrátí všechny načtené objekty.

</item>
Packit 1470ea
<item>

connect_signals(obsluhující_objekt) napojí signál na metodu zadanou v obsluhující_objekt. Může se jednat o libovolný objekt obsahující klíče a atributy, které jsou volány podobně jako název obsluhy signálu zadaný v popisu rozhraní, např. třída nebo slovník. Na řádku 39 je signál "activate" z akce undo_action napojen na funkci zpětného volání undo_callback() pomocí action.connect(signal, callback function). Podrobnější vysvětlení viz <link xref="signals-callbacks.py"/>.

Packit 1470ea
</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/gtk3/unstable/GtkGrid.html">GtkGrid</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkBuilder.html">GtkBuilder</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkWidget.html">GtkWidget</link>

</item>
Packit 1470ea
  <item>

<link href="http://developer.gnome.org/gdk3/unstable/gdk3-Event-Structures.html#GdkEventWindowState">Struktury událostí</link>

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