2011-11-13 21 views
12

tengo problemas entender gi.repositoryentendimiento gi.repository

Yo uso esta construcción en mi código

from gi.repository import Gtk 

Pero si quiero usar algún componente consigo error de importación

Busqué y lo conseguí funcionó para algunos componentes, como GtkSource, Vte, GLib, ...

Así que mi código es como

from gi.repository import Gtk, GtkSource, Vte, GLib 

Todo funcionaba bien, pero si quiero añadir matplotlib para dibujar en mis telas llegar y error

enter code/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py:40: Warning: specified class size for type `PyGtkGenericCellRenderer' is smaller than the parent type's `GtkCellRenderer' class size 
    from gtk import _gtk 
/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: assertion `node != NULL' failed 
    from gtk import _gtk 
/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_ascii_strncasecmp: assertion `s2 != NULL' failed 
    from gtk import _gtk 
Segmentation fault (core dumped) here 

¿Cómo puedo obtener matplotlib trabajar con gi.repository?

Gracias

Respuesta

6

Esa es una muy buena pregunta. Me temo que la respuesta podría ser "no puedes". El backend GTK de Matplotlib está escrito para PyGTK, las vinculaciones de estilo antiguo de Python para GTK. El paquete gi.repository es el nuevo estilo de enlaces de Python. No sé de una manera u otra si pueden mezclarse o no, pero los resultados parecen indicar que no pueden.

+2

Hace 11 meses un backend GTK3 con las últimas importaciones de depósito gi.Geis se fusionó en github: https://github.com/matplotlib/matplotlib/pull/590 No estoy seguro de qué versión tiene esto o cómo llamar exactamente pero, * debe * ser compatible ... Desafortunadamente, como descubrí recientemente, no puede usar ambas importaciones en la misma aplicación, se bloqueará (falla de segmentación). – NoBugs

13

Parece que el soporte para Gtk3 ha sido added recently. Supongo que llevará algún tiempo hasta que esté disponible en las distribuciones principales.

La mejor solución sería descargar e instalar la última versión.

Como una solución para evitar la instalación de cosas en mi Ubuntu 11.10 Tengo dowloaded backend_gtk3.py and backend_gtk3agg.py files e importados directamente como:

from gi.repository import Gtk 

from matplotlib.figure import Figure 
from backend_gtk3agg import FigureCanvasGTK3Agg as FigCanvas 

que tenía que cambiar de línea backend_gtk3agg.py 6, donde dice:

import backend_agg 

con

from matplotlib.backends import backend_agg 

, por lo que puede importar el módulo desde mi instalación norte. Hasta ahora me funciona, pero entiendo que esta solución no puede funcionar con diferentes versiones de matplotlib.

+0

aplausos por esto - hizo el trabajo genial :-) – Coops

+0

Hola, ¿estás diciendo que acabas de descargar dos archivos? Estoy intentando este ejemplo: http://matplotlib.org/dev/examples/user_interfaces/embedding_in_gtk3.html usando el procedimiento que explicas pero no funciona. ¿Podrías por favor elaborar un poco más? ¿Utiliza también la figura de la instalación matplotlib local o no? – Fabrizio