Grazie della risposta in tempi così brevi. Provo i tuoi suggerimenti e riporterò?
Il giorno 07 febbraio 2014 15:35, Marco Giusti <marco.giu...@gmail.com> ha scritto: > 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 > -- Cordiali saluti. Antonino Cardillo. E-mail: antoninocardillo...@gmail.com Cell. 393-6214016 Skype: antonino73
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python