GtkApplication s jednoduchým widgetem GMenu a objekty SimpleAction
from gi.repository import Gtk
from gi.repository import Gio
import sys
class MyWindow(Gtk.ApplicationWindow):
def __init__(self, app):
Gtk.Window.__init__(self, title="GMenu Example", application=app)
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):
# Spustí aplikaci
Gtk.Application.do_startup(self)
# Vytvoří nabídku
menu = Gio.Menu()
# Připojí do nabídky tři volby
menu.append("New", "app.new")
menu.append("About", "app.about")
menu.append("Quit", "app.quit")
# Nastaví nabídku jako aplikační nabídku
self.set_app_menu(menu)
# Vytvoří akci pro volbu "new" v nabídce
new_action = Gio.SimpleAction.new("new", None)
# Napojí ji na funkci zpětného volání new_cb
new_action.connect("activate", self.new_cb)
# Přidá akci do aplikace
self.add_action(new_action)
# Volba "about"
about_action = Gio.SimpleAction.new("about", None)
about_action.connect("activate", self.about_cb)
self.add_action(about_action)
# Volba "quit"
quit_action = Gio.SimpleAction.new("quit", None)
quit_action.connect("activate", self.quit_cb)
self.add_action(quit_action)
# Funkce zpětného volání pro "new"
def new_cb(self, action, parameter):
print("This does nothing. It is only a demonstration.")
# Funkce zpětného volání pro "about"
def about_cb(self, action, parameter):
print("No AboutDialog for you. This is only a demonstration.")
# Funkce zpětného volání pro "quit"
def quit_cb(self, action, parameter):
print("You have quit.")
self.quit()
app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
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 .
Užitečné metody pro GSimpleAction:
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:
action = Gio.SimpleAction.new("název", typ_parametru)
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é zde. K vytvoření stavové akce použijte:
action = Gio.SimpleAction.new_stateful("název", typ_parametru, počáteční_stav)
kde počáteční_stav
je definován jako GVariant, například Glib.Variant.new_string("start")
. Seznam možných stavů najdete zde.
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.
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).
Užitečné metody pro GMenu:
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 .
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)
.
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:
about = Gio.MenuItem.new("About", "app.about")
menu.append_item(about)
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.
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.
K odstranění položky z nabídky použijte remove(pozice)
.
K nastavení popisku pro nabídku použijte set_label(popisek)
.
V této ukázce se používá následující:
GMenu
GSimpleAction
GVariantType
GVariant