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