Příklad lišty s tlačítky (se standardními ikonami).
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)
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()
.
V této ukázce se používá následující:
GtkToolbar
GtkToolButton
GtkToolItem
Standardní položky
GtkActionable
GtkWidget
Struktury událostí