On Fri, Feb 07, 2014 at 02:55:25PM +0100, Antonino Cardillo wrote: > Salve a tutti. > Sto usando in un piccolo programma le pygtk dove ho l'esigenza di creare > dei checkbutton in base ad una lista che leggo da un file e nella creazione > dinamica imposto la label con il testo letto. > Di seguito una parte del codice in cui creo dinamicamente i checkbutton. > > dict_hosts=leggi_file_hosts() > for host in dict_hosts.keys(): #leggo i vari host dal dizionario > i+=1 #incremento il contatore > self.check=gtk.CheckButton(host) #creo il widget check ed assegno la > label con l'host > if dict_hosts[host]=='True': > self.check.set_active(True) > else: > self.check.set_active(False) > self.check.connect("toggled", self.toggled, "check button %i" % i) > #connetto alla funzione toggled il check > self.vbox.pack_start(self.check,0,0) #inserisco nel VBox i vari check > > > Fin qui tutto bene, il mio problema nasce quando voglio eliminare uno di > questi checkbutton come faccio ad identificarli, tipo con un ciclo e > controllo la label, ma non ho trovato in rete. > Se avete suggerimenti anche nel modo di come ho impostato il codice sopra > sono graditi.
Risolvi facilmente principalmente in due modi: 1. VBox eredita da Container e hai ha disposizione il metodo get_children() che ritorna tutti i figli. checkbox = filter(lambda w: w.get_label() == LABEL, vbox.get_children()) Volendo puoi associare dei valori arbitrari alla checkbox: check = gtk.CheckButton(host) check.set_active(dict_hosts[host] == 'True') check.set_data(KEY, i) successimante: checkbox = filter(lambda w: w.get_data(KEY) == i, vbox.get_children()) 1-bis. tieni tu una lista di riferimenti alle checkbox e poi cicli alla stessa maniera nel caso in cui la vbox contenga moltre altre cose. 2. Invece che una lista creai un dizionario con i riferimenti, molto ultile in caso di collezioni grosse e con frequenti accessi: dct[i] = check ... checkbox = dct[i] Personalmente se non hai particolari necessità opterei per prima soluzione, pygtk non gestisce i riferimenti ciclici e quindi eviterei di avere troppi riferimenti ad widget. Ed il seguente codice in realtà crea proprio un riferimento ciclico con un widget: self.check.connect("toggled", self.toggled, "check button %i" % i) Piccolo extra, assegnare `self.check` non ha molto senso dentro un ciclo, non hai bisogno di conservare il riferimento alla checkbox. ciao m. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python