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