Comunicacion entre ventanas

Eduardo Matus ematus en gmail.com
Mar Dic 2 23:08:12 CET 2008


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
>



-- 
_______________________________________
Eduardo Andrés Matus Coquelet
Ingeniero Civil Informatico y Telecomunicaciones - U. Diego Portales
Santiago, Chile.
_______________________________________

Celular: (07) 77113825
_______________________________________________
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