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

Alan Jhonn Aguiar Schwyn alanjas en hotmail.com
Jue Ene 19 19:51:45 EST 2012



Es más fácil fijarse en el log de la actividad...
Busccá la actividad: Log (si está en inglés) o Registro (en español):
http://activities.sugarlabs.org/es-ES/sugar/addon/4056
Entra a tu actividad.. cuando diga "Failed to start" la cerrás..
Vas a esa actividad y buscás el id de la actividad, ej: org.ceibaljam....
Y te fijás que error da..
Si querés podés compartir ese archivo con la lista..
Se guarda en /home/olpc/.sugar/default/logs (si mal no recuerdo)

Saludos!
Alan

Date: Thu, 19 Jan 2012 22:28:51 -0200
From: aarias1978 en gmail.com
To: olpc-uruguay en lists.laptop.org
Subject: Re: [Olpc-uruguay]	Consulta, creación de Activity

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



_______________________________________________
Olpc-uruguay mailing list
Olpc-uruguay en lists.laptop.org
http://lists.laptop.org/listinfo/olpc-uruguay 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.laptop.org/pipermail/olpc-uruguay/attachments/20120120/5627e87c/attachment-0001.html>


More information about the Olpc-uruguay mailing list