<div dir="ltr">Grazie della risposta in tempi così brevi. Provo i tuoi suggerimenti e riporterò?</div><div class="gmail_extra"><br><br><div class="gmail_quote">Il giorno 07 febbraio 2014 15:35, Marco Giusti <span dir="ltr"><<a href="mailto:marco.giusti@gmail.com" target="_blank">marco.giusti@gmail.com</a>></span> ha scritto:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Feb 07, 2014 at 02:55:25PM +0100, Antonino Cardillo wrote:<br>
> Salve a tutti.<br>
> Sto usando in un piccolo programma le pygtk dove ho l'esigenza di creare<br>
> dei checkbutton in base ad una lista che leggo da un file e nella creazione<br>
> dinamica imposto la label con il testo letto.<br>
> Di seguito una parte del codice in cui creo dinamicamente i checkbutton.<br>
><br>
> dict_hosts=leggi_file_hosts()<br>
> for host in dict_hosts.keys(): #leggo i vari host dal dizionario<br>
> i+=1 #incremento il contatore<br>
> self.check=gtk.CheckButton(host) #creo il widget check ed assegno la<br>
> label con l'host<br>
> if dict_hosts[host]=='True':<br>
> self.check.set_active(True)<br>
> else:<br>
> self.check.set_active(False)<br>
> self.check.connect("toggled", self.toggled, "check button %i" % i)<br>
> #connetto alla funzione toggled il check<br>
> self.vbox.pack_start(self.check,0,0) #inserisco nel VBox i vari check<br>
><br>
><br>
> Fin qui tutto bene, il mio problema nasce quando voglio eliminare uno di<br>
> questi checkbutton come faccio ad identificarli, tipo con un ciclo e<br>
> controllo la label, ma non ho trovato in rete.<br>
> Se avete suggerimenti anche nel modo di come ho impostato il codice sopra<br>
> sono graditi.<br>
<br>
</div></div>Risolvi facilmente principalmente in due modi:<br>
<br>
1. VBox eredita da Container e hai ha disposizione il metodo<br>
get_children() che ritorna tutti i figli.<br>
<br>
checkbox = filter(lambda w: w.get_label() == LABEL, vbox.get_children())<br>
<br>
Volendo puoi associare dei valori arbitrari alla checkbox:<br>
<br>
<br>
check = gtk.CheckButton(host)<br>
check.set_active(dict_hosts[host] == 'True')<br>
check.set_data(KEY, i)<br>
<br>
successimante:<br>
<br>
checkbox = filter(lambda w: w.get_data(KEY) == i, vbox.get_children())<br>
<br>
1-bis. tieni tu una lista di riferimenti alle checkbox e poi cicli alla<br>
stessa maniera nel caso in cui la vbox contenga moltre altre cose.<br>
<br>
2. Invece che una lista creai un dizionario con i riferimenti, molto<br>
ultile in caso di collezioni grosse e con frequenti accessi:<br>
<br>
dct[i] = check<br>
...<br>
checkbox = dct[i]<br>
<br>
<br>
Personalmente se non hai particolari necessità opterei per prima<br>
soluzione, pygtk non gestisce i riferimenti ciclici e quindi eviterei di<br>
avere troppi riferimenti ad widget.<br>
<br>
Ed il seguente codice in realtà crea proprio un riferimento ciclico con<br>
un widget:<br>
<div class="im"><br>
self.check.connect("toggled", self.toggled, "check button %i" % i)<br>
<br>
<br>
</div>Piccolo extra, assegnare `self.check` non ha molto senso dentro un<br>
ciclo, non hai bisogno di conservare il riferimento alla checkbox.<br>
<br>
ciao<br>
m.<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Cordiali saluti.<br>Antonino Cardillo.<br>E-mail: <a href="mailto:antoninocardillo.it@gmail.com" target="_blank">antoninocardillo.it@gmail.com</a><br>Cell. 393-6214016<br>
Skype: antonino73
</div>