我正在尝试让GTK3和Python3在windows下工作到我的项目中。
我有一个连续的anaconda设置,带有32位python 3.4和Matplotib via conda install matplotlib。
我安装了PyGobject(https://sourceforge.net/projects/pygobjectwin32/)并通过安装程序安装了GTK + / Glade。
GTK3教程的基本例子效果很好(空屏幕)
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()
我现在想在gtk中嵌入matplotlib,我从matplotlib(http://matplotlib.org/examples/user_interfaces/embedding_in_gtk3.html)获得了示例
然后我看到我需要cairocffi,因为有些不可能。 (PyCairo不支持matplotlib函数)
我从Gohlke获得了cffi的windows二进制文件
并且finnaly做了一个
pip install cairocffi
现在我只是让python.exe停止工作。
尝试使用GTK3agg和GTK3Cairo后端,我有相同的结果
环顾四周,我发现也许cairo版本已经过时了matplotlib使用的函数,但我不知道如何继续。
如果我尝试运行其他东西,Cairocffi会工作。
更多信息(来自以下评论):
我仍然遇到未处理的win32错误。我设法打开错误并说:
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.
它只是崩溃......
答案 0 :(得分:0)
我在matplotlib
中使用Python3 + Gtk3
遇到了一些问题。我找到了this cookbook page的工作示例。尝试在cookbook中运行示例 - 尤其是最简单的示例:
#!/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()
此外,并非您需要一个相当新版本的matplotlib
来使Python3
上的内容正常工作。
如果您仍有问题,请向我们提供完整的错误消息。
注意:我在Linux上测试了这个(没有Windows),但是,从你的问题描述来看,这个问题是常见问题。
答案 1 :(得分:0)
多年来,我在Windows上遇到相同的问题。 matplotlib 2.0.0 realease的文档指出Gtk3 backend is not supported on Windows。最近,我在Linux(Ubuntu)下运行Gtk3Agg后端时遇到问题。在这两种情况下,它总是与开罗有关。
因此,我编写了此后端的自己的实现,您可以找到它here。从我的模块中导入FigureCanvasGtk3Agg,并以与官方相同的方式使用它。它缺少一些功能,但是,如果您只想显示一个图,它将完成工作。
您可以通过运行模块来尝试该模块,它应该在窗口中显示一个简单的彩色图形。我在Linux和Windows上都尝试过,没有问题。
工作原理:
诀窍是避免在Python3中导入Cairo,因为通常它不起作用(以我的经验)。通过使用GdkPixbuf
完成。
然后Gdk.cairo_set_source_pixbuf
完成其余工作,并在'draw-event'回调中调用Gtk提供的cairo上下文的两个方法。 Cairo永远不会导入模块中。