Signály a zpětná volání (Python) Vysvětlení signálů a zpětných volání v GTK+. Sebastian Pölsterl sebp@k-d-w.org 2011 Marta Maria Casetti mmcasetti@gmail.com 2012 Signály a zpětná volání
Přehled

Podobně jako jiné nástrojové sady GUI, i GTK+ používá událostmi řízený model programování. Když uživatel nic nedělá, hoví si GTK+ v hlavní smyčce a čeká na vstup. Když uživatel provede nějakou činnost – řekněme, že klikne myší – tak se hlavní smyčka „probudí“ a doručí událost do GTK+.

Když událost obdrží widgety, nejčastěji vyšlou jeden nebo více signálů. Signály upozorní váš program, že „se něco zajímavého stalo“ tím, že vyvolají funkci, kterou jste na signál napojili. Tyto funkce jsou obecně známé jako zpětná volání. Jakmile je vaše zpětné volání vyvoláno, měli byste běžně něco udělat. Po dokončení zpětného volání se GTK+ vrátí do zpětné smyčky a čeká na další uživatelův vstup.

Obecný příklad: handler_id = widget.connect("událost", zpětné_volání, data). widget je instance widgetu, který jsme vytvořili dříve. Následuje událost, která nás zajímá. Každý widget má své vlastní konkrétní události, které u něj mohou nastat. Například, když máte Gtk.Button, obvykle chcete napojit událost "clicked": to znamená, že když je na tlačítko kliknuto, vyšle se signál. Jiným příkladem je signál notify::property: kdykoliv je u GObject změněna vlastnost, tak místo prostého vyslání signálu notify, přiřadí GObject tomuto signálu doplňující údaj v podobě názvu změněné vlastnosti. To umožňuje klientovi, který si přeje být upozorňován na změny jen u jedné vlastnosti, odfiltrovat většinu událostí dříve, než k němu dorazí. Zatřetí, argument zpětné_volání je název funkce zpětného volání, která obsahuje kód, co se má spustit při vyslání signálu zadaného typu. A nakonec, volitelný argument data obsahuje libovolná data, která by měla být předána při vyslání signálu.

Funkce vrací číslo (handler_id), které identifikuje tento konkrétní pár signál/zpětné volání. Toto číslo je požadováno při odpojení signálu v podobě widget.disconnect(handler_id). Způsobí to, že takováto funkce zpětného volání již nebude nadále volána v budoucnu nebo při právě probíhajícím vysílání signálu, který byl na ni napojen.

Odkazy

Signály v dokumentaci k GObject

Základy – Hlavní smyčka a signály ve výuce GTK+ 3 v jazyce Python