[Python] gestione checkbutton

Antonino Cardillo antoninocardillo.it a gmail.com
Ven 7 Feb 2014 16:05:19 CET


Grazie della risposta in tempi così brevi. Provo i tuoi suggerimenti e
riporterò?


Il giorno 07 febbraio 2014 15:35, Marco Giusti <marco.giusti a 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 a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>



-- 
Cordiali saluti.
Antonino Cardillo.
E-mail: antoninocardillo.it a gmail.com
Cell. 393-6214016
Skype: antonino73
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140207/dc00e422/attachment.html>


Maggiori informazioni sulla lista Python