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.
Signály v dokumentaci k GObject
Základy – Hlavní smyčka a signály ve výuce GTK+ 3 v jazyce Python