Obvyklé widgety v GTK: zjišťování a nastavování nejčastějších hodnot

Ú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.

Vzorové řešení příkladu

Příklad využívá přiložený soubor gui.xml. Výchozí kód pro programy najdete na nové stránce vzory programů.:
#!/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

Rozšířené kontejnerové widgety, gtk.HPaned, gtk.Notebook, gtk.Expander, gtk.ScrolledWindow

Glade
Zpět na obsah | Poslední úprava: 2011-12-11