[Python] R: Re: R: Re: Gtk - ListView - Catturare la selezione di una riga e lanciare una funzione.

Marco Fochesato marcofoc a libero.it
Lun 3 Maggio 2010 21:47:49 CEST


> altro, č l'unica cosa che mi viene in mente con le informazioni che ho -
> se il problema non č quello, mi sa che senza un esempiuccio funzionante
> del problema non so aiutarti).
> 

Ecco l'esempio funzionante. Chiedo perdono ai mostri che leggono la
lista per li codice che posto... sono un novello.
Sorvolate dal notare il modo in cui filtro i dati dei "prodotti". Nella
realtā uso il parametro che mi dā la selezione del fornitore per
estrarre i dati giā filtrati dal database con un comando SQL.

import pygtk
pygtk.require('2.0')
import gtk


class Programma:

    def __init__(self, principale):
        
        self.mioPrincipale = principale        
        self.finestraprincipale =
gtk.Window(gtk.WINDOW_TOPLEVEL)        
        self.finestraprincipale.connect("delete_event",
self.delete_event)
        self.finestraprincipale.connect("destroy", self.destroy)
        self.finestraprincipale.set_size_request(300, 300)
        self.finestraprincipale.set_title("PROGRAMMA PROVA LISTVIEW")
        self.framegenerale = gtk.HBox(False,0)
        self.finestraprincipale.add(self.framegenerale)
        self.quadroprodotti = gtk.VBox (True, 1)
        
        self.scrollwinfornitori = gtk.ScrolledWindow()
        self.scrollwinfornitori.set_size_request(100, 200)
        self.scrollwinfornitori.set_policy(gtk.POLICY_AUTOMATIC,
gtk.POLICY_AUTOMATIC)
        self.listafornitor = gtk.ListStore(str, str)        
        self.listafornitori = gtk.TreeView(self.listafornitor)
        self.listafornitori.set_rules_hint(1)
        self.colonnaidfornitore = gtk.TreeViewColumn("idfornitore")
        self.colonnanomefornitore = gtk.TreeViewColumn("Fornitore")

self.listafornitori.append_column(self.colonnanomefornitore)        
        self.cell_fornitori = gtk.CellRendererText()
        self.colonnanomefornitore.pack_start(self.cell_fornitori, True)
        self.colonnanomefornitore.add_attribute(self.cell_fornitori,
'text', 1)
        self.quadroprodotti.add(self.scrollwinfornitori)
        self.scrollwinfornitori.add_with_viewport(self.listafornitori)
        self.scrollwinfornitori.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        
        self.scrollwinprodotti =gtk.ScrolledWindow()
        self.scrollwinprodotti.set_size_request(100, 200)
        self.scrollwinprodotti.set_policy(gtk.POLICY_AUTOMATIC,
gtk.POLICY_AUTOMATIC)       
        self.listaprodott = gtk.ListStore(str, str)        
        self.listaprodotti= gtk.TreeView(self.listaprodott)
        self.listaprodotti.set_rules_hint(1)        
        self.colonnaidprodotto = gtk.TreeViewColumn("IdProdotto")
        self.colonnanomeprodotto = gtk.TreeViewColumn("Prodotto")

self.listaprodotti.append_column(self.colonnanomeprodotto)        
        self.cell_prodotti = gtk.CellRendererText()
        self.colonnanomeprodotto.pack_start(self.cell_prodotti, True)
        self.colonnanomeprodotto.add_attribute(self.cell_prodotti,
'text', 0)
        self.quadroprodotti.add(self.scrollwinprodotti)
        self.scrollwinprodotti.add_with_viewport(self.listaprodotti)
        self.scrollwinprodotti.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
        self.quadroricetta = gtk.VBox(False, 1)
        
        self.framegenerale.add(self.quadroprodotti)
        self.framegenerale.show_all()
        self.finestraprincipale.show_all()


        rows = [("1","Tizio"), ("2","Caio"), ("3","Sempronio")]
        
        for row in rows:
            nomefornitore = str(row[1])
            idfornitore = str(row[0])
            self.listafornitor.append([idfornitore, nomefornitore])

        treeselection=self.listafornitori.get_selection()
        treeselection.set_mode(gtk.SELECTION_SINGLE)
        treeselection.set_select_function(self.stampalistaprodotti,
iter)


    def stampalistaprodotti(self, evento, dato):
        
        self.listaprodott.clear()
        treeiter = self.listafornitor.get_iter(evento)

        idfornitoreselezionato = self.listafornitor.get_value(treeiter,
0)       
    
        rows = [("1", "1", "Mele"),("2", "4", "Pollo"),("3", "7",
"Carote")]
        for row in rows:
            idfornitore = str(row[0])
            idprodotto = str(row[1])
            nomeprodotto = str(row[2])
            if idfornitore == idfornitoreselezionato:
                self.listaprodott.append([nomeprodotto, idprodotto])
   

    def delete_event(self, widget, data=None):
        return gtk.FALSE

    def destroy(self, widget, data=None):
        return gtk.main_quit()


    def main(self):
        gtk.main()
        
if __name__ == "__main__":
    radice=""
    first = Programma(radice)
    first.main()




Maggiori informazioni sulla lista Python