Widget GtkMenuButton
se používá k zobrazení nabídky po kliknutí na něj. Nabídka může být poskytnuta v podobě GtkMenu
nebo jako abstraktní GMenuModel
. Tlačítko může obsahovat libovolný platný synovský widget. To znamená, že může obsahovat většinu ostatních standardních potomků GtkWidget
. Nejčastěji používaným vloženým widgetem je GtkArrow
.
Musíte používat GNOME 3.6 nebo novější, aby widget MenuButton fungoval.
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="Menubutton Example", application=app)
self.set_default_size(600, 400)
grid = Gtk.Grid()
# Tlačítko s nabídkou
menubutton = Gtk.MenuButton()
menubutton.set_size_request(80, 35)
grid.attach(menubutton, 0, 0, 1, 1)
# Nabídka se dvěmi akcemi
menumodel = Gio.Menu()
menumodel.append("New", "app.new")
menumodel.append("About", "win.about")
# Podnabídka s jednou akcí pro nabídku
submenu = Gio.Menu()
submenu.append("Quit", "app.quit")
menumodel.append_submenu("Other", submenu)
# Nabídka je nastavena jako nabídka pro MenuButton
menubutton.set_menu_model(menumodel)
# Akce vztahující se k oknu ("about")
about_action = Gio.SimpleAction.new("about", None)
about_action.connect("activate", self.about_callback)
self.add_action(about_action)
self.add(grid)
# Zpětné volání pro "about"
def about_callback(self, action, parameter):
print("You clicked \"About\"")
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)
# Akce vztahující se k aplikaci
new_action = Gio.SimpleAction.new("new", None)
new_action.connect("activate", self.new_callback)
self.add_action(new_action)
quit_action = Gio.SimpleAction.new("quit", None)
quit_action.connect("activate", self.quit_callback)
self.add_action(quit_action)
# Funkce zpětného volání pro akce vtahující se k aplikaci
def new_callback(self, action, parameter):
print("You clicked \"New\"")
def quit_callback(self, action, parameter):
print("You clicked \"Quit\"")
self.quit()
app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
Na řádku 33 je signál "activate"
od činnosti about_action
napojen na funkci zpětného volání about_callback()
pomocí action.connect(signál, funkce zpětného volání)
. Podrobnější vysvětlení viz .
Umístění nabídky je určeno vlastností "direction"
(směr) tlačítka s nabídkou a vlastnostmi "halign"
(vodorovné zarovnání) nebo "valign"
(svislé zarovnání) nabídky. Například, když je směr Gtk.ArrowType.DOWN
(další volba je UP
) a vodorovné zarovnání je Gtk.Align.START
(další volby jsou CENTER
a END
), bude nabídka umístěna pod tlačítkem s počáteční hranou (v závislosti na směru textu) nabídky zarovnanou s počáteční hranou tlačítka. Jestliže pod tlačítkem není dostatek místa, vyskočí místo toho nabídka nahoru. Když by zarovnání posunulo část nabídky mimo obrazovku, natlačí se do viditelné části.
V případě svislého zarovnání jsou možné směry šipky LEFT
a RIGHT
a svislé zarovnání je START
, CENTER
nebo END
.
K nastavení těchto vlastností můžete použít set_align_widget(zarovnání)
a set_direction(směr)
.
V této ukázce se používá následující:
MenuButton