2016-07-20 5 views
1

Ich versuche GTK3 und Python3 unter Windows zu meinem Projekt arbeiten zu lassen.Matplotlib und GTK3 auf Python3-Fenstern arbeiten

Ich habe ein Kontinuum Anakonda-Setup mit einem 32-Bit-Python 3.4 und Matplotib über Conda installieren Matplotlib.

Ich habe PyGobject (https://sourceforge.net/projects/pygobjectwin32/) installiert und GTK +/Glade über das Installationsprogramm installiert.

Der Grund exemple vom GTK3 Tutorial funktioniert gut (leerer Bildschirm)

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 

win = Gtk.Window() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

ich jetzt matplotlib in gtk einbetten möge, ich das Beispiel von matplotlib bekam (http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3.html)

Ich sah dann, dass Ich brauchte Cairocffi wegen einiger Unvereinbarkeiten. (PyCairo hat keine Unterstützung für eine matplotlib Funktion)

habe ich die Windows-Binaries für cffi von Gohlke

Und finnaly hat einen

pip install cairocffi 

Und jetzt bekomme ich nur ein python.exe aufgehört zu arbeiten.

mit GTK3agg und GTK3Cairo Backends versucht, und ich habe das gleiche Ergebnis

umsah, fand ich, dass vielleicht die kairo Version für die Funktionen von matplotlib verwendet veraltet ist, aber ich weiß nicht, wie es weitergeht.

Cairocffi funktioniert, wenn ich versuche, etwas anderes zu laufen.

Weitere Informationen (aus dem Kommentar unten):

Ich habe immer noch eine nicht behandelte win32 Fehler. Ich schaffte es, den Fehler zu öffnen und es sagt:

Unhandled exception at 0x08CF6D58 (libcairo-2.dll) in python.exe: 
0xC0000005: Access violation reading location 0x000000A8. 
If there is a handler for this exception, the program may be safely continued. 

Es ist einfach abstürzt ...

Antwort

0

ich meinen Anteil an Probleme gehabt haben mit matplotlib in Python3 + Gtk3. Ich habe this cookbook page mit Arbeitsbeispielen gefunden. Versuchen Sie, die Beispiele in dem Kochbuch führen - vor allem die einfachste:

#!/usr/bin/python3 

from gi.repository import Gtk 

from matplotlib.figure import Figure 
from numpy import arange, pi, random, linspace 
import matplotlib.cm as cm 
#Possibly this rendering backend is broken currently 
#from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas 
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas 

myfirstwindow = Gtk.Window() 
myfirstwindow.connect("delete-event", Gtk.main_quit) 
myfirstwindow.set_default_size(400, 400) 

fig = Figure(figsize=(5,5), dpi=100) 
ax = fig.add_subplot(111, projection='polar') 

N = 20 
theta = linspace(0.0, 2 * pi, N, endpoint=False) 
radii = 10 * random.rand(N) 
width = pi/4 * random.rand(N) 

bars = ax.bar(theta, radii, width=width, bottom=0.0) 

for r, bar in zip(radii, bars): 
    bar.set_facecolor(cm.jet(r/10.)) 
    bar.set_alpha(0.5) 

ax.plot() 

sw = Gtk.ScrolledWindow() 
myfirstwindow.add(sw) 

canvas = FigureCanvas(fig) 
canvas.set_size_request(400,400) 
sw.add_with_viewport(canvas) 

myfirstwindow.show_all() 
Gtk.main() 

Auch nicht, dass Sie eine ziemlich neue Version von matplotlib müssen die Dinge auf Python3 zu arbeiten.

Wenn Sie immer noch Probleme haben, zeigen Sie uns bitte die vollständige Fehlermeldung.

Hinweis: Ich habe dies auf Linux getestet (habe kein Windows), aber, von Ihrer Beschreibung der Probleme, das Problem ist (war) eine gemeinsame.

+0

Hallo, ich habe diese Seite auch gefunden und es versucht. Ich habe immer noch einen unbehandelten Win32-Fehler. Ich habe es geschafft, den Fehler zu öffnen, und es heißt: Unbehandelte Ausnahme bei 0x08CF6D58 (libcairo-2.dll) in python.exe: 0xC0000005: Zugriffsverletzung beim Lesen von Speicherort 0x000000A8. Wenn für diese Ausnahme ein Handler vorhanden ist, kann das Programm sicher fortgesetzt werden. Es stürzt einfach ... – Luc

+0

Kann Ihnen wirklich nicht helfen - Wie ich es verstehe, ist das Gtk3Agg-Backend im Moment nicht funktionstüchtig, also haben Sie keine andere Wahl als den Gtk3Cairo zu verwenden. Das Problem hinter all dem ist die Änderung von Introspection, um Python3 mit Gtk3 zu verbinden. Matplotlib verwendete ursprünglich keine Introspektion und wurde "nur" aktualisiert, um es zu benutzen. Aber das bedeutet, dass Ihr Problem an vielen verschiedenen Orten entsteht. Sie könnten in Erwägung ziehen, Ihr Programm in Python2 zu testen. Es gibt keinen großen Unterschied. – jcoppens