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