Comunicacion entre ventanas

Tomas Hernandez thernand en inf.utfsm.cl
Mie Dic 3 03:59:02 CET 2008


YAAAAAAAAAAAAAAAAAAAJU!!!!!!!!!!!!!!!!!

Resultó Eduardo, finalmente el archivó quedó asi:

class change(GladeConnect):

        _texto = ""

        def __init__(self, mainWn):

                self.mainWn = mainWn

                GladeConnect.__init__(self, "glade/wnChange.glade")

        def on_btnChange_clicked(self, btn=None):

                self.mainWn.lblValue.set_text(self.txtChange.get_text())

                self.wnChange.hide()

        def setText(self, texto):

                self._texto = texto

                self.txtChange.set_text(self._texto)

----
Me podrías explicar cual es la lógica de hacer un popup = change(self).
MUCHAS GRACIAS =D.

Eduardo Matus wrote:
> change.py:
> class change(GladeConnect):
>       _texto = ""
>       def __init__(self, mainWn):
>               GladeConnect.__init__(self, "glade/wnChange.glade")
>              self.mainWn = mainWn
>
>       def on_btnChange_clicked(self, btn=None):
> OJO --->        self.mainWn.lblValue.set_text(self._texto)
>               self.wnChange.hide()
>       def setText(self, texto):
>               self._texto = texto
>               self.txtChange.set_text(self._texto)
>
>       def getText(self):
>               print self.txtChange.get_text()
>               return self._texto
>
>
> 2008/12/2 Tomas Hernandez <thernand en inf.utfsm.cl>
>
>   
>> Me salió esto:
>> ***********************************************************************
>> File "/home/patton/workspace/signals/change.py", line 16, in
>> on_btnChange_clicked
>>   self.mainWn.lblValue.set_text(self._texto)
>>  File "/home/patton/workspace/signals/GladeConnect.py", line 70, in
>> __getattr__
>>   raise AttributeError, name
>> AttributeError: mainWn
>> ***********************************************************************
>>
>> Los archivos están asi:
>>
>>
>> ****************************************************************************************
>> change.py:
>> class change(GladeConnect):
>>       _texto = ""
>>       def __init__(self, mainWn):
>>               GladeConnect.__init__(self, "glade/wnChange.glade")
>>
>>       def on_btnChange_clicked(self, btn=None):
>> OJO --->        self.mainWn.lblValue.set_text(self._texto)
>>               self.wnChange.hide()
>>       def setText(self, texto):
>>               self._texto = texto
>>               self.txtChange.set_text(self._texto)
>>
>>       def getText(self):
>>               print self.txtChange.get_text()
>>               return self._texto
>>
>>
>> ****************************************************************************************
>> main.py
>> class main(GladeConnect):
>>       _value = ""
>>       def __init__(self):
>>               GladeConnect.__init__(self, "glade/wnMain.glade")
>>
>>       def on_btnChange_clicked(self, btn=None):
>>               popup = change(self)
>>               popup.wnChange.show()
>>               popup.setText(self.lblValue.get_text())
>>
>>       def start(self):
>>               gtk.main()
>>               return 0
>>
>> if __name__=="__main__":
>>       app = main()
>>       app.start()
>>
>> ****************************************************************************************
>>
>> Me pasó que importé desde la change.py a todo lo de main (from main import
>> *)
>> pero me crea una nueva ventana debido al if __name__=="__main__" con la
>> cual hago siempre un gtk.main.
>>
>>
>>
>> Eduardo Matus wrote:
>>
>>     
>>> pero que te salio.. algun error??
>>> mainWn la dejaste como variable de clase???
>>> self.mainWn.lblValues.set_text(....
>>>
>>> 2008/12/2 Tomas Hernandez <thernand en inf.utfsm.cl>
>>>
>>>
>>>
>>>       
>>>> Qué consigo con eso? :O (perdón pero soy novato), me imagino que
>>>> podría ocupar los metodos de la primera ventana?.
>>>>
>>>> Me quedó así:
>>>> class change(GladeConnect):
>>>>  def __init__(self, mainWn):
>>>>       y en la primera:
>>>>  def on_btnChange_clicked(self, btn=None):
>>>>     popup = change(self)
>>>>
>>>> Intenté usar los atributos en la segunda ventana asi:
>>>>  mainWn.lblValues.set_text(txtValues.get_text())
>>>>
>>>> pero no funcionó. Me podrías explicarías por favor?.
>>>>
>>>>
>>>>
>>>> Eduardo Matus wrote:
>>>>
>>>>
>>>>
>>>>         
>>>>> tendrias que pasar la instancia de la primer ventana
>>>>> popup = change(self)
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Dec 2, 2008 at 11:00 PM, Tomas Hernandez <thernand en inf.utfsm.cl
>>>>>
>>>>>
>>>>>           
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>             
>>>>>
>>>>>           
>>>>>> Gracias por responder Eduardo,
>>>>>>
>>>>>> Claro, puedo acceder a las variables, el problema es que para ello
>>>>>> se me ocurre hacer un boton "refresh" en la ventana principal
>>>>>> para acceder a las variables  y cambiar el contenido del label, pero
>>>>>> lo que yo quiero, es que al apretar el boton de la segunda ventana
>>>>>> cambie automaticamente en la primera.
>>>>>> Por ahora logré pasar valores de la principal a la otra, pero en
>>>>>> sentido
>>>>>> contrario no puedo hacerlo automatico.
>>>>>>
>>>>>> Saludos.
>>>>>>
>>>>>>
>>>>>> Eduardo Matus wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> Hola, no estoy seguro, pero si tienes esto
>>>>>>>  def on_btnChange_clicked(self, btn=None):
>>>>>>>               popup = change()
>>>>>>>               popup.wnChange.show()
>>>>>>>
>>>>>>> popup, es una instancia de change, por lo tanto puedes acceder a las
>>>>>>> variables de esa clase despues de cerrarla
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Dec 2, 2008 at 9:40 PM, Tomas Hernandez <
>>>>>>> thernand en inf.utfsm.cl
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>>>
>>>>>>>               
>>>>>>>> Hola lista,
>>>>>>>>
>>>>>>>> Hace un tiempo envié un correo sobre lo mismo y nadie puro darme una
>>>>>>>> solución ='(.
>>>>>>>> Esta vez, insisto, por si alguien se motiva a ayudarme =D y
>>>>>>>> explicarme.
>>>>>>>>
>>>>>>>> Tengo 2 archivos .glade y 2 .py:
>>>>>>>> wnEdit.glade (txtValues, btnChange)
>>>>>>>> wnMain.glade (lblValues, btnChange)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ****************************************************************************************
>>>>>>>> change.py:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ****************************************************************************************
>>>>>>>> 1 #! /usr/bin/env python
>>>>>>>> 2
>>>>>>>> 3 import pygtk
>>>>>>>> 4 pygtk.require("2.0")
>>>>>>>> 5 import gtk
>>>>>>>> 6 from gtk import glade
>>>>>>>> 7 from GladeConnect import GladeConnect
>>>>>>>> 8
>>>>>>>> 9 class change(GladeConnect):
>>>>>>>> 10         def __init__(self):
>>>>>>>> 11                 GladeConnect.__init__(self,
>>>>>>>> "glade/wnChange.glade")
>>>>>>>> 12
>>>>>>>> 13         def on_btnChange_clicked(self, btn=None):
>>>>>>>> 14                 self.wnChange.hide()
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ****************************************************************************************
>>>>>>>> main.py
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ****************************************************************************************
>>>>>>>> 1 #!/usr/bin/env python
>>>>>>>> 2
>>>>>>>> 3 import pygtk
>>>>>>>> 4 pygtk.require("2.0")
>>>>>>>> 5 import gtk
>>>>>>>> 6 from gtk import glade
>>>>>>>> 7 from GladeConnect import GladeConnect
>>>>>>>> 8 from change import *
>>>>>>>> 9
>>>>>>>> 10 class main(GladeConnect):
>>>>>>>> 11         def __init__(self):
>>>>>>>> 12                 GladeConnect.__init__(self, "glade/wnMain.glade")
>>>>>>>> 13
>>>>>>>> 14         def on_btnChange_clicked(self, btn=None):
>>>>>>>> 15                 popup = change()
>>>>>>>> 16                 popup.wnChange.show()
>>>>>>>> 17
>>>>>>>> 18         def start(self):
>>>>>>>> 19                 gtk.main()
>>>>>>>> 20                 return 0
>>>>>>>> 21
>>>>>>>> 22 if __name__=="__main__":
>>>>>>>> 23         app = main()
>>>>>>>> 24         app.start()
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ****************************************************************************************
>>>>>>>>
>>>>>>>> Lo que quiero hacer es:
>>>>>>>> - Abrir la primera ventana
>>>>>>>> - Hacer click en el boton de esa ventana para abrir una nueva
>>>>>>>> - En esa nueva escribir algo
>>>>>>>> - Hacer click en el boton de esa nueva ventana y refrescar
>>>>>>>> automaticamente
>>>>>>>> el label
>>>>>>>> de la primera.
>>>>>>>>
>>>>>>>>
>>>>>>>> ¿cómo puedo hacerlo?. Hasta ahora la dinamica entre ventanas
>>>>>>>> funciona...!
>>>>>>>> _______________________________________________
>>>>>>>> Lista de correo Python-es
>>>>>>>> http://listas.aditel.org/listinfo/python-es
>>>>>>>> FAQ: http://listas.aditel.org/faqpyes
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>> _______________________________________________
>>>>>> Lista de correo Python-es http://listas.aditel.org/listinfo/python-es
>>>>>> FAQ: http://listas.aditel.org/faqpyes
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>             
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> _______________________________________________
>>>> Lista de correo Python-es http://listas.aditel.org/listinfo/python-es
>>>> FAQ: http://listas.aditel.org/faqpyes
>>>>
>>>>
>>>>
>>>>         
>>>
>>>
>>>
>>>       
>> _______________________________________________
>> Lista de correo Python-es http://listas.aditel.org/listinfo/python-es
>> FAQ: http://listas.aditel.org/faqpyes
>>
>>     
>
>
>
>   

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es