[Python] [PyGTK] GtkMessageDialog funzionante solo per una volta

Marco Bonifazi marcobonifazi a gmail.com
Ven 19 Mar 2010 14:31:55 CET


2010/3/19 Antonio Fittipaldi <moaiamorfo a python-it.org>

> Il 19 marzo 2010 13.10, Marco Bonifazi  ha scritto:
> > Fai bene ad approfittarne ma non ho idea, ne avevo tonnellate di questi
> > Glade warning con le PyGtk (a proposito: non e' entrato di moda
> GtkBuilder?)
>
> Sinceramente non ho mai ben capito la differenza fra libglade e
> GtkBuilder...
>
>
Quando iniziai a usare libglade, GtkBuilder non c'era (o se c'era non me ne
sono accorto). Ma da quanto ho capito, ora sembra sia meglio (=sara' meglio
mantenuto) GtkBuilder.


> Una cosa: come faccio a parametrizzare mostra_fin_mes()? Vorrei
> passargli il testo da mostrare nella finestra.
> Ovviamente, se faccio cosė funziona:
>
>    def mostra_fin_mes(self, widget, data="Foo."):
>        self.fin_mes.format_secondary_text(data)
>         a = self.fin_mes.run()
>        if a == gtk.RESPONSE_OK:
>            self.fin_mes.hide()
>
> Il problema č: come faccio a passare l'argomento dall'ambiente
> chiamante? 'pul_reimposta_clicked': self.mostra_fin_mes, nel
> dizionario di connessione dei segnali, non mi pare molto amichevole
> (non mi pare sia possibile passarvi parametri, e qui non servirebbe).
> Pensavo a un attributo di classe che mantenga il messaggio corrente da
> mostrare.
>

A me piaceva lasciare le callback con il numero dei parametri che
richiedevano (nel tuo caso avrei lasciato "def mostra_fin_mes(self,
widget)") per poi utilizzare invece degli attributi di classe.
Considera anche che non sei obbligato a inserire il testo della
MessageDialog proprio appena prima che tu la lanci, ma anche, che so, in
fase di creazione della relativa View che stai gestendo.
Anzi, a veder meglio il codice, probabilmente non avrei inserito il codice
per l'avvio di una MessageDialog all'interno di una callback di un altro
evento.
In genere quindi dividevo tra funzioni "callback", intese come funzioni che
ricevono segnali/eventi (usando il participio passato nel nome della
funzione), e funzioni "agenti" (usando l'imperativo) ossia che creavano o
modificavano attivamente l'interfaccia.

In pratica avrei disaccoppiato e fatto qualcosa del tipo:


   def my_signal_received(self, widget):
        self.show_my_message_dialog("Testo che mi piace")


   def show_my_message_dialog(self, message_text)
        self.fin_mes.format_secondary_text(message_text)

        a = self.fin_mes.run()
       if a == gtk.RESPONSE_OK:
           self.fin_mes.hide()


Comunque alla fine sono tutte scelte progettuali, basate sulla tua realta',
che ovviamente conosco poco.




-- 
Marco Bonifazi
http://www.bonifazi.eu
-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100319/61118608/attachment.htm 


Maggiori informazioni sulla lista Python