|
Packit |
1470ea |
|
|
Packit |
1470ea |
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="menubutton.py" xml:lang="cs">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">MenuButton</title>
|
|
Packit |
1470ea |
<link type="guide" xref="beginner.py#buttons"/>
|
|
Packit |
1470ea |
<link type="next" xref="toolbar.py"/>
|
|
Packit |
1470ea |
<revision version="0.1" date="2012-08-19" status="draft"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Tiffany Antopolski</name>
|
|
Packit |
1470ea |
<email its:translate="no">tiffany.antopolski@gmail.com</email>
|
|
Packit |
1470ea |
<years>2012</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Marta Maria Casetti</name>
|
|
Packit |
1470ea |
<email its:translate="no">mmcasetti@gmail.com</email>
|
|
Packit |
1470ea |
<years>2012</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>Tlačítko, které po kliknutí zobrazí nabídku</desc>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>MenuButton</title>
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/menubutton.png"/>
|
|
Packit |
1470ea |
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 .
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<note>Musíte používat GNOME 3.6 nebo novější, aby widget MenuButton fungoval. </note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<links type="section"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="code">
|
|
Packit |
1470ea |
<title>Kód použitý k vygenerování tohoto příkladu</title>
|
|
Packit |
1470ea |
from gi.repository import Gtk
|
|
Packit |
1470ea |
from gi.repository import Gio
|
|
Packit |
1470ea |
import sys
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
class MyWindow(Gtk.ApplicationWindow):
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def __init__(self, app):
|
|
Packit |
1470ea |
Gtk.Window.__init__(self, title="Menubutton Example", application=app)
|
|
Packit |
1470ea |
self.set_default_size(600, 400)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
grid = Gtk.Grid()
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Tlačítko s nabídkou
|
|
Packit |
1470ea |
menubutton = Gtk.MenuButton()
|
|
Packit |
1470ea |
menubutton.set_size_request(80, 35)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
grid.attach(menubutton, 0, 0, 1, 1)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Nabídka se dvěmi akcemi
|
|
Packit |
1470ea |
menumodel = Gio.Menu()
|
|
Packit |
1470ea |
menumodel.append("New", "app.new")
|
|
Packit |
1470ea |
menumodel.append("About", "win.about")
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Podnabídka s jednou akcí pro nabídku
|
|
Packit |
1470ea |
submenu = Gio.Menu()
|
|
Packit |
1470ea |
submenu.append("Quit", "app.quit")
|
|
Packit |
1470ea |
menumodel.append_submenu("Other", submenu)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Nabídka je nastavena jako nabídka pro MenuButton
|
|
Packit |
1470ea |
menubutton.set_menu_model(menumodel)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Akce vztahující se k oknu ("about")
|
|
Packit |
1470ea |
about_action = Gio.SimpleAction.new("about", None)
|
|
Packit |
1470ea |
about_action.connect("activate", self.about_callback)
|
|
Packit |
1470ea |
self.add_action(about_action)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
self.add(grid)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Zpětné volání pro "about"
|
|
Packit |
1470ea |
def about_callback(self, action, parameter):
|
|
Packit |
1470ea |
print("You clicked \"About\"")
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
class MyApplication(Gtk.Application):
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def __init__(self):
|
|
Packit |
1470ea |
Gtk.Application.__init__(self)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def do_activate(self):
|
|
Packit |
1470ea |
win = MyWindow(self)
|
|
Packit |
1470ea |
win.show_all()
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def do_startup(self):
|
|
Packit |
1470ea |
Gtk.Application.do_startup(self)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Akce vztahující se k aplikaci
|
|
Packit |
1470ea |
new_action = Gio.SimpleAction.new("new", None)
|
|
Packit |
1470ea |
new_action.connect("activate", self.new_callback)
|
|
Packit |
1470ea |
self.add_action(new_action)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
quit_action = Gio.SimpleAction.new("quit", None)
|
|
Packit |
1470ea |
quit_action.connect("activate", self.quit_callback)
|
|
Packit |
1470ea |
self.add_action(quit_action)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# Funkce zpětného volání pro akce vtahující se k aplikaci
|
|
Packit |
1470ea |
def new_callback(self, action, parameter):
|
|
Packit |
1470ea |
print("You clicked \"New\"")
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def quit_callback(self, action, parameter):
|
|
Packit |
1470ea |
print("You clicked \"Quit\"")
|
|
Packit |
1470ea |
self.quit()
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
app = MyApplication()
|
|
Packit |
1470ea |
exit_status = app.run(sys.argv)
|
|
Packit |
1470ea |
sys.exit(exit_status)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="methods">
|
|
Packit |
1470ea |
<title>Užitečné metody pro widget MenuButton</title>
|
|
Packit |
1470ea |
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 <link xref="signals-callbacks.py"/>.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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 .
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
K nastavení těchto vlastností můžete použít set_align_widget(zarovnání) a set_direction(směr) .
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="references">
|
|
Packit |
1470ea |
<title>Odkazy k API</title>
|
|
Packit |
1470ea |
V této ukázce se používá následující:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkMenuButton.html">MenuButton</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|