Seminář programování v Pythonu na PORGu - lekce 22

gtkComboBox -- rozbalovací seznam

Podobně jako pro jiné widgety je zdrojem dat pro gtkCombobox neviditelný widget gtkListstore.

V tomto příkladu jej vytvoříme za běhu a to s dvěma sloupci, první sloupec bude obrázek a druhý sloupec bude text.

1) S použitím šablony grafické aplikace a programu Glade vytvořte známým postupem okno, které bude obsahovat gtkComboBox jménem "combobox1".

2) Do funkce __init__, ideálně před příkaz self.w("window1").show_all(), přidejte tento kód:

## Příprava liststore
        muj_liststore = gtk.ListStore(gtk.gdk.Pixbuf, str)
        for name,icon in [['Plain Text','gnome-mime-text'],
                        ['PDF', 'gnome-mime-application-pdf'],
                        ['Postscript', 'gnome-mime-application-postscript'],
                        ['Web Page (HTML)', 'gnome-mime-text-html'],
                        ['JPEG', 'gnome-image-jpeg']]:
            image = gtk.icon_theme_get_default().load_icon(icon,24,gtk.ICON_LOOKUP_USE_BUILTIN)
            muj_liststore.append([image,name])

        ## Nastavení liststore s daty pro combobox1
        self.w("combobox1").set_model(muj_liststore)


        # U comboboxu1 přidáme renderery pro obrázek a text (viz lekce 17)
        renderer = gtk.CellRendererPixbuf()
        self.w("combobox1").pack_start(renderer, expand=False)
        self.w("combobox1").add_attribute(renderer, 'pixbuf', 0)

        renderer = gtk.CellRendererText()
        self.w("combobox1").pack_start(renderer, expand=True)
        self.w("combobox1").add_attribute(renderer, 'text', 1)        

        ## Předvybrání první položky 
        self.w("combobox1").set_active(0)

        ## Přidání obsluhy událostí
        self.w('combobox1').connect('changed', self.changed_cb)

Pro přidání odezvy na událost změny výběru přidejte toto (což ale už znáte):

    def changed_cb(self, combobox):
        model = combobox.get_model()
        index = combobox.get_active()
        print "Hodnota změněna na ", model[index][0]

Zpět na obsah | Poslední úprava: 2012-03-05