[Olpc-uruguay] Consulta, creación de Activity

Alvaro Arias aarias1978 en gmail.com
Jue Ene 19 19:28:51 EST 2012


Buenas noches, luego de haber seguido sus consejos y luego de ver algun
ejemplo que anda en la vuelta, logre que la Xo hiciera algo,
lamentablemente no tengo resuelto el asunto, aunque tengo un error para
pasarles y ver si me pueden dar alguna idea de que puede estar mal.

Error: "Actividad failed to start"

Les paso que odifique en cada archivo.

*setup.py*

#!/usr/bin/env python
try:
    from sugar.activity import bundlebuilder
    bundlebuilder.start()
except ImportError:
    import os
    os.system("find ./ | sed 's,^./,editor.activity/,g' > MANIFEST")
    os.system('rm editor.xo')
    os.chdir('..')
    os.system('zip -r editor.xo editor.activity')
    os.system('mv editor.xo ./editor.activity')
    os.chdir('editor.activity')

*activity.py
*
# Load GTK
import gtk

# Load our own source code from gtktest.py
# There you can find the main class gtktest()
from VenEditor import VenEditor

# Load sugar libraries
from sugar.activity import activity

class editorActivity(activity.Activity):
    def __init__(self, handle):
        activity.Activity.__init__(self, handle)
        self._name = handle

        # Set title for our Activity
        self.set_title('EDITOR DHA')

        # Attach sugar toolbox (Share, ...)
        toolbox = activity.ActivityToolbox(self)
        self.set_toolbox(toolbox)
        toolbox.show()

        # Create the main container
        self._main_view = gtk.VBox()

        # Import our class gtktest():

        # Step 1: Load class, which creates gtktest.widget
        self.VenEditor = VenEditor()

        # Step 2: Remove the widget's parent
        if self.VenEditor.widget.parent:
            self.VenEditor.widget.parent.remove(self.VenEditor.widget)

        # Step 3: We attach that widget to our window
        self._main_view.pack_start(self.VenEditor.widget)

        # Display everything
        self.VenEditor.widget.show()
        self._main_view.show()
        self.set_canvas(self._main_view)
        self.show_all()
*
VenEditor.py
*
#! /usr/bin/env python
# -*- coding: UTF-8 -*-

# Importamos el módulo pygtk y le indicamos que use la versión 2
import pygtk
pygtk.require("2.0")

# Luego importamos el módulo de gtk y el gtk.glade, este ultimo que nos
sirve
# para poder llamar/utilizar al archivo de glade
import gtk
import gtk.glade


# Creamos la clase de la ventana principal del programa
class VenEditor:
    def __init__(self, runaslib=True):
        # Le decimos a nuestro programa que archivo de glade usar (puede
tener
        # un nombre distinto del script). Si no esta en el mismo directorio
del
        # script habría que indicarle la ruta completa en donde se encuentra
        self.elem = gtk.glade.XML("editor.glade")
        # Get Window
        self.widgets = self.elem.get_widget("window1")

        # Creamos un pequeño diccionario que contiene las señales definidas
en
        # glade y su respectivo método (o llamada)
        signals = { "on_entry1_activate" : self.on_button1_clicked,
                    "on_button1_clicked" : self.on_button1_clicked,
                    "gtk_main_quit" : gtk.main_quit }

        # Luego se auto-conectan las señales.
        self.elem.signal_autoconnect(signals)
        # Nota: Otra forma de hacerlo es No crear el diccionario signals y
        # solo usar "self.widgets.signal_autoconnect(self)" -->Ojo con el
self

        # Ahora obtenemos del archivo glade los widgets que vamos a
        # utilizar (en este caso son label1 y entry1)
        self.label1 = self.elem.get_widget("label1")
        self.entry1 = self.elem.get_widget("entry1")

        if not runaslib:
            self.widgets.show_all()
            gtk.main()

    # Se definen los métodos, en este caso señales como "destroy" ya fueron
    # definidas en el .glade, así solo se necesita definir
"on_button1_clicked"
    def on_button1_clicked(self, widget):
        texto = self.entry1.get_text()
        self.label1.set_text("Hola %s" % texto)

# Para terminar iniciamos el programa
if __name__ == "__main__":
    VenEditor(False)
*

activity.info
*[Activity]
name = Editor DHA
service_name = org.laptop.EditoDHA
class = activity.editorActivity
icon = activity-default
activity_version = 1
show_launcher = yes
license = GPLv2+
host_version = 1*
*
Nuevamente, muchas gracias por el tiempo dedicado y por las ideas que me
puedan dar.

SAludos.


El 16 de enero de 2012 12:30, Alvaro Arias <aarias1978 en gmail.com> escribió:

> Bueno muchas gracias por la guía, hoy de tarde voy a hacer las pruebas con
> los cambios que me sugieren a ver si logro resolver el problema.
>
> saludos,
> Alvaro
>
> El 16 de enero de 2012 12:26, Flavio Danesse <fdanesse en gmail.com>escribió:
>
> Hola.
>>
>> Bueno, yo nunca he usado glade, siempre escribo todo en gedit o nano, de
>> modo que no se como se trabaja en glade ni como se cargan sus archivos en
>> el programa, pero te oriento un poco sobre lo que necesita sugar para
>> funcionar:
>>
>> *La ventana principal de sugar es una ventana gtk que hereda de
>> sugar.activity.activity.Activity, así que tu ventana tiene que ser así:*
>>
>> from sugar.activity.activity import Activity
>>
>> class AulaVirtual(Activity):
>>     def __init__(self, handle):
>>         Activity.__init__(self, handle)
>>
>> *Ahora bien, el contenido de esa ventana, se agrega con:*
>>
>>         self.set_canvas(widgetcontenedor)
>>
>> De modo que tu actividad, debiera implementar un contenedor que no sea
>> una ventana para poder meterlo en el canvas de la ventana de sugar. Como
>> cargas todo eso, no se :P, pero al menos acá te indico donde debe ir.
>>
>> Para cargar los archivos, indicando el path correcto donde se encuentra,
>> lo mejor es utilizar __file__ del ejecutable base de la actividad, lo cual
>> te da la dirección de sí mismo, es decir, si en el paquete de tu actividad
>> tienes un directorio llamado "interfaz", donde está toda la interfaz
>> gráfica de tu aplicación, en el archivo que hereda de "activity", puede
>> indicar el path así:
>>
>> DIRECTORIO_BASE= os.path.dirname(__file__) # devuelve el path de este
>> archivo que se está ejecutando
>> DIRECTORIO_INTERFAZ= os.path.join(DIRECTORIO_BASE, "interfaz")
>>
>> De esta forma, te aseguras que el path siempre será correcto sin importar
>> la localización del paquete de tu programa.
>>
>>
>>
>>
>>
>> El 16 de enero de 2012 12:01, Alvaro Arias <aarias1978 en gmail.com>escribió:
>>
>> Hola Pablo, antes que nada muchas gracias por contestar.
>>>
>>> Realizo los import:
>>>
>>>     import pygtk
>>>     pygtk.require('2.0')
>>>     import gtk
>>>     import gtk.glade
>>>
>>> Luego relaciono el archivo Glade:
>>> def __init__(self):
>>>
>>>         self.widgets = gtk.glade.XML("editor.glade")
>>>         # Obtenemos la ventana
>>>         self.ventana = self.widgets.get_widget("VentanaPrincipal")
>>> Le conecto las Señales que voy a usar:
>>>
>>>        signals = {
>>>                    "gtk_main_quit" : gtk.main_quit,
>>>                    "on_button1_clicked" : self.btnPersonaje,
>>>                    "on_button2_clicked" : self.btnEnemigo,
>>>                    "on_button3_clicked" : self.btnPlataforma,
>>>                    "on_button4_clicked" : self.btnObjeto,
>>>                    "on_button5_clicked" : self.btnFondo,
>>>                    "on_toolbutton2_clicked" : self.btnAbrir,
>>>                    "on_toolbutton5_clicked" : self.btnAcerca}
>>>
>>> En realidad no me da ningún error, simplemente no me muestra nada de la
>>> interface gráfica.
>>> Ya hice una activity para comprobar que sigo bien el procedimiento y
>>> corroboré que lo estoy haciendo bien (esta activity es sin glade, es
>>> simplemente una ventana hecha en Gtk que muestra un botón).
>>>
>>> Yo intuyo que el problema que estoy teniendo es donde cologo mis
>>> archivos glade, le estoy errando donde van localizados, pero la verdad no
>>> tengo claro donde debería ponerlos, te paso la estructura de carpetas que
>>> tengo en mi proyecto:
>>> src/
>>>      Editor/
>>>               Grafica/
>>>                         iconos/
>>>                         imagenes/
>>>                         archivos.glade
>>>               Logica/
>>>                        archivos.py
>>>
>>> Saludos,
>>> Alvaro
>>>
>>>
>>> El 16 de enero de 2012 11:55, Pablo Moleri <pmoleri en gmail.com> escribió:
>>>
>>> Hola
>>>>
>>>> ¿Podrías mostrar la parte de código donde levantás el archivo?
>>>> Tendrías que hacer algo de este estilo:
>>>>    window = gtk.glade.XML("interfaz.glade")
>>>>
>>>>
>>>>
>>>>
>>>> ¿Qué error recibís?
>>>>
>>>> Saludos,
>>>> Pablo
>>>>
>>>> 2012/1/16 Alvaro Arias <aarias1978 en gmail.com>
>>>>
>>>>> Buen día.
>>>>>
>>>>> Estoy tratando de crear una activity de la aplicación que he
>>>>> desarrollado, esta aplicación está hecha en Python, para la misma use PyGtk
>>>>> y para facilitar la creación de la interfaz gráfica utilice la aplicación
>>>>> de diseño Glade.
>>>>>
>>>>> Estoy teniendo problemas para que levante la interface dentro de la
>>>>> Xo, no relaciona el archivo glade , no se donde debo referenciar el archivo
>>>>> glade (este archivo es un xml donde esta toda la especificación de la
>>>>> Interface).
>>>>>
>>>>> Agradezco mucho me puedan guiar.
>>>>>
>>>>> Saludos
>>>>>
>>>>> --
>>>>> *Alvaro
>>>>> *
>>>>>
>>>>> _______________________________________________
>>>>> Olpc-uruguay mailing list
>>>>> Olpc-uruguay en lists.laptop.org
>>>>> http://lists.laptop.org/listinfo/olpc-uruguay
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Olpc-uruguay mailing list
>>>> Olpc-uruguay en lists.laptop.org
>>>> http://lists.laptop.org/listinfo/olpc-uruguay
>>>>
>>>>
>>>
>>>
>>> --
>>> *Alvaro
>>> *
>>>
>>> _______________________________________________
>>> Olpc-uruguay mailing list
>>> Olpc-uruguay en lists.laptop.org
>>> http://lists.laptop.org/listinfo/olpc-uruguay
>>>
>>>
>>
>> _______________________________________________
>> Olpc-uruguay mailing list
>> Olpc-uruguay en lists.laptop.org
>> http://lists.laptop.org/listinfo/olpc-uruguay
>>
>>
>
>
> --
> *Alvaro
> *
>



-- 
*Alvaro
*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20120119/f291f0ea/attachment-0001.html>


More information about the Olpc-uruguay mailing list