# MenuButton

Tiffany Antopolski
tiffany.antopolski@gmail.com 2012
Marta Maria Casetti
mmcasetti@gmail.com 2012
Tlačítko, které po kliknutí zobrazí nabídku

# MenuButton

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.

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

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)

# Užitečné metody pro widget MenuButton

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)`.

# Odkazy k API

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

MenuButton