Comunicacion entre ventanas

Tomas Hernandez thernand en inf.utfsm.cl
Mie Dic 3 08:06:03 CET 2008


Gracias nuevamente Eduardo, ahora entiendo bastante más
sobre POO =D.

Saludos.

Eduardo Matus wrote:
> ok, self, en una clase, es como "yo mismo" contiene todos los metodos y
> variables, entonces cuando haces
> popup = change(self) le estas pasando a la clase change todos los metodos y
> variables. es por eso que tienes acceso al label de la clase principal
>
> On Wed, Dec 3, 2008 at 3:59 AM, Tomas Hernandez <thernand en inf.utfsm.cl>wrote:
>
>   
>> 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
>>
>>     
>
>
>
>   

_______________________________________________
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