# 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