# Toolbar (Python)

Marta Maria Casetti
mmcasetti@gmail.com 2012
Lišta s tlačítky a dalšími widgety

# Toolbar

Příklad lišty s tlačítky (se standardními ikonami).

# Kód použitý k vygenerování tohoto příkladu

from gi.repository import Gtk from gi.repository import Gdk from gi.repository import Gio import sys

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="Toolbar Example", application=app) self.set_default_size(400, 200)

# Mřížka pro připojení nástrojové lišty grid = Gtk.Grid()

# Nástrojová lišta vytvořená v metodě create_toolbar (viz dále) toolbar = self.create_toolbar() # S dodatečným vodorovným místem toolbar.set_hexpand(True) # Zobrazí nástrojovou lištu toolbar.show()

# Připojí nástrojovou lištu do mřížky grid.attach(toolbar, 0, 0, 1, 1)

# Přidá mřížku do okna self.add(grid)

# Vytvoří akce, které ovládají okno a napojí jejich signály na # metody zpětného volání (viz dále):

# Akce "undo" undo_action = Gio.SimpleAction.new("undo", None) undo_action.connect("activate", self.undo_callback) self.add_action(undo_action)

# Akce "fullscreen" fullscreen_action = Gio.SimpleAction.new("fullscreen", None) fullscreen_action.connect("activate", self.fullscreen_callback) self.add_action(fullscreen_action)

# Metoda, která vytvoří nástrojovou lištu def create_toolbar(self): # Nástrojová lišta toolbar = Gtk.Toolbar()

# Jedná se o hlavní nástrojovou lištu aplikace toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

# Vytvoří tlačítko pro akci "new", se standardní ikonou new_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW) # Popisek se zobrazuje new_button.set_is_important(True) # Vloží tlačítko na pozici na nástrojové liště toolbar.insert(new_button, 0) # Zobrazí tlačítko new_button.show() # Nastaví název akce přidružené k tlačítku # Tato akce řídí aplikaci (app) new_button.set_action_name("app.new")

# Tlačítko pro akci "open" open_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN) open_button.set_is_important(True) toolbar.insert(open_button, 1) open_button.show() open_button.set_action_name("app.open")

# Tlačítko pro akci "undo" undo_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO) undo_button.set_is_important(True) toolbar.insert(undo_button, 2) undo_button.show() undo_button.set_action_name("win.undo")

# Tlačítko pro akci "fullscreen/leave fullscreen" self.fullscreen_button = Gtk.ToolButton.new_from_stock( Gtk.STOCK_FULLSCREEN) self.fullscreen_button.set_is_important(True) toolbar.insert(self.fullscreen_button, 3) self.fullscreen_button.set_action_name("win.fullscreen")

# Vrátí kompletní nástrojovou lištu return toolbar

# Metoda zpětného volání pro "undo" def undo_callback(self, action, parameter): print("You clicked \"Undo\".")

# Metoda zpětného volání pro "fullscreen/leave fullscreen" def fullscreen_callback(self, action, parameter): # Zkontroluje, jestli je stav stejný jako Gdk.WindowState.FULLSCREEN, # což je bitový příznak is_fullscreen = self.get_window().get_state( ) & Gdk.WindowState.FULLSCREEN != 0 if not is_fullscreen: self.fullscreen_button.set_stock_id(Gtk.STOCK_LEAVE_FULLSCREEN) self.fullscreen() else: self.fullscreen_button.set_stock_id(Gtk.STOCK_FULLSCREEN) self.unfullscreen()

class MyApplication(Gtk.Application):

def __init__(self): Gtk.Application.__init__(self)

def do_activate(self): win = MyWindow(self) win.show_all()

def do_startup(self): Gtk.Application.do_startup(self)

# Vytvoří akce pro ovládání aplikace a napojí jejich signály na # metody zpětného volání (viz dále):

# Akce "new" new_action = Gio.SimpleAction.new("new", None) new_action.connect("activate", self.new_callback) app.add_action(new_action)

# Akce "open" open_action = Gio.SimpleAction.new("open", None) open_action.connect("activate", self.open_callback) app.add_action(open_action)

# Metoda zpětného volání pro "new" def new_callback(self, action, parameter): print("You clicked \"New\".")

# Metoda zpětného volání pro "open" def open_callback(self, action, parameter): print("You clicked \"Open\".")

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# Užitečné metody pro widget Toolbar

Na řádku 32 je signál `"activate"` od činnosti `undo_action` napojen na funkci zpětného volání `undo_callback()` pomocí `action.connect(signál, funkce zpětného volání)`. Podrobnější vysvětlení viz .

Použijte `insert(nástrojová_položka, pozice)` k vložení `nástrojové_položky` na `pozici`. Pokud je `pozice` záporná, bude položka vložena na konec nástrojové lišty.

`get_item_index(tool_item)` vrací pozici `tool_item` na nástrojové liště.

`get_n_items()` vrací počet položek na nástrojové liště. `get_nth_item(pozice)` vrací položku na pozici `pozice`.

Pokud nástrojová lišta nemá dostatek místa pro všechny položky a je použito `set_show_arrow(True)`, položky které jdou mimo se zobrazí v nabídce přetékajících položek.

`set_icon_size(velikost_ikony)` nastavuje velikost ikony na nástrojové liště. Parametr `velikost_ikony` může být něco z `Gtk.IconSize.INVALID`, `Gtk.IconSize.MENU`, `Gtk.IconSize.SMALL_TOOLBAR`, `Gtk.IconSize.LARGE_TOOLBAR`, `Gtk.IconSize.BUTTON`, `Gtk.IconSize.DND` nebo `Gtk.IconSize.DIALOG`. Používat by se to mělo jen pro speciální účely, normálně by nástrojová lišta aplikace měla respektovat uživatelské předvolby pro velikost ikon. `unset_icon_size()` zruší volbu nastavenou pomocí `set_icon_size(velikost_ikony)`, takže se k určení velikosti ikon použije uživatelská předvolba.

`set_style(styl)`, kde `styl` je jedno z `Gtk.ToolbarStyle.ICONS`, `Gtk.ToolbarStyle.TEXT`, `Gtk.ToolbarStyle.BOTH` nebo `Gtk.ToolbarStyle.BOTH_HORIZ`, nastavuje, jestli nástrojová lišta zobrazuje jen ikony, jen text nebo obojí (svisle na sobě nebo vedle sebe). Abyste umožňili uživateli předvolby určující styl nástrojové lišty a zrušit již nastavený styl, použijte `unset_style()`.

# Odkazy k API

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

GtkToolbar

GtkToolButton

GtkToolItem

Standardní položky

GtkActionable

GtkWidget

Struktury událostí