El widget «GtkMenuButton» se usa para mostrar un menú cuando se pulsa. Este menú puede proporcionarse como un «GtkMenu», o un «GMenuModel» abstracto. El widget «GtkMenuButton» puede contener cualquier widget hijo válido. Esto es casi cualquier «GtkWidget» estándar. El hijo más comúnmente usado es el «GtkArrow» proporcionado.
Necesita ejecutar GNOME 3.6 para que el «MenuButton» funcione.
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()
# a menubutton
menubutton = Gtk.MenuButton()
menubutton.set_size_request(80, 35)
grid.attach(menubutton, 0, 0, 1, 1)
# a menu with two actions
menumodel = Gio.Menu()
menumodel.append("New", "app.new")
menumodel.append("About", "win.about")
# a submenu with one action for the menu
submenu = Gio.Menu()
submenu.append("Quit", "app.quit")
menumodel.append_submenu("Other", submenu)
# the menu is set as the menu of the menubutton
menubutton.set_menu_model(menumodel)
# the action related to the window (about)
about_action = Gio.SimpleAction.new("about", None)
about_action.connect("activate", self.about_callback)
self.add_action(about_action)
self.add(grid)
# callback for "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)
# the actions related to the application
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)
# callback functions for the actions related to the application
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)
En la línea 33 la señal «activate»
de la acción about_action
se conecta a la función de retorno de llamada about_callback()
usando action.connect(señal, función de retorno de llamada)
. Consulte la para obtener una explicación más detallada.
La posición del menú está determinada por la propiedad «direction» del botón de menú y las propiedades «halign» o «valign» del menú. Por ejemplo, cuando «direction» es Gtk.ArrowType.DOWN
(otra opción: UP
) y la alineación horizontal es Gtk.Align.START
(otras opciones: CENTER
y END
), el menú se posiciona bajo el botón, con su borde inicial (dependiendo de la dirección del texto) alineado con el borde inicial del botón. Si no hay suficiente espacio bajo el botón, el menú, en cambio, se abre sobre él. Si la alineación mueve parte del menú fuera de la pantalla, se «empuja hacia adentro».
En el caso de alineación vertical, las direcciones de «ArrowType» posibles son LEFT
y RIGHT
, y la alineación vertical es, nuevamente, START
, CENTER
o END
.
set_align_widget(alineación)
y set_direction(dirección)
pueden usarse para establecer estas propiedades.
En este ejemplo se usa lo siguiente:
MenuButton