ÚKOL: vytvořte v Glade program, který bude pod sebou obsahovat:
Při kliknutí na tlačítko "Cyklovat" se přesunou hodnoty o jeden widget níže, tzn. zaškrtnutí CheckButtonu způsobí vložení textu "ON" do Entry, nezaškrtnutí způsobí vložení textu "OFF".
Využívejte kvalitní dokumentace z http://www.pygtk.org/docs/pygtk/. Hodnoty, které se mají číst/nastavovat, jsou uvedeny u widgetu v závorce.
#!/usr/bin/env python #coding=utf8 ## důležité: určuje kódování souboru; nutno zvolit cp1250 nebo utf8 dle editoru import sys, gtk class Main: def __init__(self): ## Vytvoření widgetů a přidání obsluh událostí podle Glade self.builder = gtk.Builder() self.builder.add_from_file(sys.path[0] + "/" + "gui.xml") self.builder.connect_signals(self) self.w("window1").connect('destroy', lambda w: gtk.main_quit()) # zavření okna -> ukončení programu self.w("window1").show_all() def w(self, widgetname): """Pomůcka pro stručný přístup k widgetům""" return self.builder.get_object(widgetname) ## Odsud obsluhy událostí def on_button1_clicked(self, widget): """Přenáší stav ON/OFF cyklicky mezi widgety""" ## zapamatování stavu 1. widgetu initial_label_value = self.w("label1").get_text() ## nastavení 5. widgetu # metoda get_active() navrací hodnotu True/False, lze ji použít bez porovnávání if self.w("checkbutton1").get_active(): self.w("label1").set_text("ON") else: self.w("label1").set_text("OFF") ## nastavení 4. widgetu if self.w("entry1").get_text() == "ON": self.w("checkbutton1").set_active(True) else: self.w("checkbutton1").set_active(False) ## nastavení 3. widgetu if self.w("radiobutton1").get_active(): self.w("entry1").set_text("ON") else: self.w("entry1").set_text("OFF") ## nastavení 2. widgetu # všimněte si, že ZDE nastavuji vždy jeden jako aktivní: if self.w("togglebutton1").get_active(): self.w("radiobutton1").set_active(True) else: self.w("radiobutton2").set_active(True) ## nastavení 1. widgetu podle paměti if initial_label_value == "ON": self.w("togglebutton1").set_active(True) else: self.w("togglebutton1").set_active(False) def myerr(exc_type, exc_value, tb): import traceback; traceback.print_exception(exc_type, exc_value, tb) raw_input() # smažte pro výpis chyby bez pozastavení; přejmenujte na input() v pythonu3 sys.excepthook = myerr # úprava výpisu chyb, aby se program pozastavil po výpisu MainInstance = Main() # inicializace hlavní třídy programu gtk.main() # program čeká na události, které vyvolá uživatel