web-dev-qa-db-fra.com

Problème d'intégration d'une figure pylab dans une application Gtk en utilisant rapidement

J'essaie actuellement de créer une application simple qui comprend des chiffres pylab. Je viens de commencer à utiliser quickly et je suis préoccupé par certains problèmes d'importation. Autrement dit, aucun des backends matplotlib ne pourra fonctionner.

Plus précisément, si l'une des instructions import suivantes n'est pas commentée dans mon fichier principal, quickly ne pourra pas exécuter l'application.

#from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
#from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
#from matplotlib.backends.backend_gtkcairo import FigureCanvasGTKCairo as FigureCanvas

donc il n'y a aucun moyen que je puisse intégrer une intrigue.

Voici la sortie de quickly run si la backend_gtk n'est pas commenté

/usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning: g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed   import gobject._gobject 
/usr/lib/python2.7/dist-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/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: assertion `node != NULL' failed   from gtk import _gtk

Une idée de ce qui pourrait résoudre le problème? Avez-vous besoin de plus d'informations?

2
Buddyshot

Vous aurez besoin d'au moins la version 1.2.0 de matplotlib, puis utilisez les backends GTK3.

Exemple tiré de http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3.html

#!/usr/bin/env python
"""
demonstrate adding a FigureCanvasGTK3Agg widget to a Gtk.ScrolledWindow
using GTK3 accessed via pygobject
"""

from gi.repository import Gtk

from matplotlib.figure import Figure
from numpy import arange, sin, pi
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas

win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit )
win.set_default_size(400,300)
win.set_title("Embedding in GTK")

f = Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
a.plot(t,s)

sw = Gtk.ScrolledWindow()
win.add (sw)
# A scrolled window border goes outside the scrollbars and viewport
sw.set_border_width (10)

canvas = FigureCanvas(f)  # a Gtk.DrawingArea
canvas.set_size_request(800,600)
sw.add_with_viewport (canvas)

win.show_all()
Gtk.main()

Remarque: Ubuntu 12.04 n'a pas Matplotlib 1.2.0 dans le référentiel, mais il est installable via pip:

Sudo pip install matplotlib
1
Timo