Comunicacion entre ventanas

Eduardo Matus ematus en gmail.com
Mar Dic 2 22:40:19 CET 2008


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
>



-- 
_______________________________________
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