Tooltip (Python) Marta Maria Casetti mmcasetti@gmail.com 2012 Přidání vysvětlivek do vašich widgetů Tooltip

Nástrojová lišta s vysvětlivkami (s obrázky) u tlačítek.

Tento příklad vychází z příkladu Toolbar.

Kód použitý k vygenerování tohoto příkladu from gi.repository import Gtk from gi.repository import Gdk from gi.repository import Gio import sys class MyWindow(Gtk.ApplicationWindow): def __init__(self, app): Gtk.Window.__init__( self, title="Toolbar with Tooltips Example", application=app) self.set_default_size(400, 200) grid = Gtk.Grid() toolbar = self.create_toolbar() toolbar.set_hexpand(True) toolbar.show() grid.attach(toolbar, 0, 0, 1, 1) self.add(grid) undo_action = Gio.SimpleAction.new("undo", None) undo_action.connect("activate", self.undo_callback) self.add_action(undo_action) fullscreen_action = Gio.SimpleAction.new("fullscreen", None) fullscreen_action.connect("activate", self.fullscreen_callback) self.add_action(fullscreen_action) def create_toolbar(self): toolbar = Gtk.Toolbar() toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR) # Tlačítko pro akci "new" new_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_NEW) # S vysvětlivkou se zadaným textem new_button.set_tooltip_text("Create a new file") new_button.set_is_important(True) toolbar.insert(new_button, 0) new_button.show() new_button.set_action_name("app.new") # Tlačítko pro akci "open" open_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_OPEN) # S vysvětlivkou se zadaným textem s použitím značkovacího jazyka Pango open_button.set_tooltip_markup("Open an <i>existing</i> file") open_button.set_is_important(True) toolbar.insert(open_button, 1) open_button.show() open_button.set_action_name("app.open") # Tlačítko pro akci "undo" undo_button = Gtk.ToolButton.new_from_stock(Gtk.STOCK_UNDO) # S vysvětlivkou s obrázkem # Nastaví vlastnost "has-tooltip" na True undo_button.set_property("has-tooltip", True) # Napojí funkci zpětného volání na signál "query-tooltip" # od vysvětlivky undo_button.connect("query-tooltip", self.undo_tooltip_callback) undo_button.set_is_important(True) toolbar.insert(undo_button, 2) undo_button.show() undo_button.set_action_name("win.undo") # Tlačítko pro akci "fullscreen/leave fullscreen" self.fullscreen_button = Gtk.ToolButton.new_from_stock( Gtk.STOCK_FULLSCREEN) self.fullscreen_button.set_is_important(True) toolbar.insert(self.fullscreen_button, 3) self.fullscreen_button.set_action_name("win.fullscreen") return toolbar # Funkce zpětného volání pro vysvětlivku tlačítka "undo" def undo_tooltip_callback(self, widget, x, y, keyboard_mode, tooltip): # Nastaví text pro vysvětlivku tooltip.set_text("Undo your last action") # Nastaví ikonu pro vysvětlivku tooltip.set_icon_from_stock("gtk-undo", Gtk.IconSize.MENU) # Zobrazí vysvětlivku return True def undo_callback(self, action, parameter): print("You clicked \"Undo\".") def fullscreen_callback(self, action, parameter): is_fullscreen = self.get_window().get_state( ) & Gdk.WindowState.FULLSCREEN != 0 if not is_fullscreen: self.fullscreen_button.set_stock_id(Gtk.STOCK_LEAVE_FULLSCREEN) self.fullscreen() else: self.fullscreen_button.set_stock_id(Gtk.STOCK_FULLSCREEN) self.unfullscreen() 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) new_action = Gio.SimpleAction.new("new", None) new_action.connect("activate", self.new_callback) app.add_action(new_action) open_action = Gio.SimpleAction.new("open", None) open_action.connect("activate", self.open_callback) app.add_action(open_action) def new_callback(self, action, parameter): print("You clicked \"New\".") def open_callback(self, action, parameter): print("You clicked \"Open\".") app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)
Užitečné metody pro widget Tooltip

set_tooltip_text(text) a set_tooltip_markup(text) můžete použít k přidání vysvětlivky v podobě prostého textu (nebo textu se značkovacím jazykem Pango) k widgetu.

Pro složitější vysvětlivky, například pro vysvětlivky s obrázky:

Nastavte vlastnost "has-tooltip" widgetu na True. To přiměje GTK+ sledovat widget ohledně pohybu myši a dalších událostí, které jsou zapotřebí k určení, kdy a kde zobrazit vysvětlivku.

Napojte signál "query-tooltip". Tento signál bude vyslán, když by měla být vysvětlivka zobrazena. Jedním z argumentů předaných do obsluhy signálu je objekt GtkTooltip. Jedná se o objekt, který bude zobrazen jako vysvětlivka a může být v našem zpětném volání upravován pomocí funkcí, jako je set_icon(). Existují funkce pro nastavení textu se značkovacím jazykem (set_markup(text)), pro nastavení obrázku ze standardní ikony (set_icon_from_stock(standardní_id, velikost)) nebo i pro vložení vlastního widgetu (set_custom(widget)).

Ze své obsluhy signálu "query-tooltip" vraťte True. Způsobí to zobrazení vysvětlivky. Když vrátíte False, tak se nezobrazí.

V pravděpodobně zřídkavějších případech, kdy budete chtít větší kontrolu nad vysvětlivkou, která se má zobrazit, můžete nastavit své vlastní GtkWidow, které bude použito jako okno vysvětlivky. Funguje to následovně:

Nastavte "has-tooltip" a napojte ke "query-tooltip" stejně jako dříve.

Použijte u widgetu funkci set_tooltip_window() k nastavení GtkWindow, které jste vytvořili, jako okna vysvětlivky.

Ve zpětném volání pro signál "query-tooltip" máte přístup ke svému oknu pomocí get_tooltip_window() a upravte si jej podle svých potřeb. Sémantika vracené hodnoty je úplně stejná jako v předchozím – True okno zobrazí, False jej nezobrazí.

Odkazy k API

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

GtkTooltip

GtkToolbar

GtkWidget

Standardní položky