问题标签 [pycairo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
12290 浏览

python - Is there a better library for drawing vector graphics in Python than Cairo?

...Not that I have anything against Cairo -- I love it in fact. It's just terribly difficult to install the Python bindings, especially on a Mac (see all the SO questions about installing pycairo on OS X). Are there better alternatives?

Edit:

For a little more context, I'm creating a web service that I would like to be simple to deploy, ideally using standard installation channels; not being able to simply use pip or easy_install introduces complexity into the deployment process on many deployment platforms. Additionally, I'd like it to be easy for anyone to set up a virtual environment and do development on the application on their local machine. Again, ease of installation is an important point here.

0 投票
1 回答
2116 浏览

python - Python + Cairo + GTK/GDK 像素缓冲区的简单设置

为了我自己的利益和可能的教育用途,我想为 Python 和 Cairo 制作一个类似于 pygame 的 API。但我不希望它完全是 pygame。我想把它做成一个半静态的绘图平台,使用 GTK/GDK 显示一个或多个图像,我想模仿 TiKZ(乳胶包)的优秀 API 原理。PyGame API 还不错,但我并不满意。一个特别的问题是,我希望包通过将所有内容绘制到 pixbuf(使用 Cairo)来处理窗口刷新,并在窗口未发现时自动重绘 pixbuf。这样,最终程序员就不必担心窗口刷新。事实上,最终程序员不应该只需要编写一个类或函数,或者只需要编写一行代码就可以画出笑脸(比如说)。图形库也不必像在 TkInter 中那样维护更长的存储形状对象列表。(至少,我希望开罗不要这样做违背我的意图。)

我成功地在 pycairo 中绘制了各种东西,并输出到 ImageMagick 和 Postscript。所以我对 pycairo 本身没意见。

不幸的是,我找到的 cairo/gtk/pycairo/pygtk 文档 --- 我不知道它是为谁编写的,但不是为我编写的。目前,我是 Project Euler 类型的程序员,而不是“5 个最前沿的超面向对象 API”类型的程序员。我想看到一个关于做什么的清晰解释,和/或一个清晰的例子。


好的,我接受了发布的一个答案,因为它至少有点帮助。但简而言之,这是真正的重点。关键是当你在 GDK 中绘制东西时,GDK 会做一个临时的双缓冲,包括使用 Cairo。预计当您处理公开事件时,您将重绘所有内容。但是如果你有一个非常复杂的图像,这是一个缓慢的过程,尤其是在 Python 中。因此,如果开罗可以写信给永久居民,那就更好了双缓冲区而不是临时缓冲区,然后将使用 GDK 公开该永久双缓冲区。一些开发人员想要解决这个问题。似乎有某种解决方案的项目之一是 Google Chromium --- 你有没有注意到 Google Chrome 中的窗口曝光有多好,例如在 Linux 中?所以我将查看 Chromium 源代码,看看我是否可以轻松地做到这一点。

附录:我看到我确实通过专门提到“pixbufs”来混淆这个问题。我并不真正关心 pixbufs(我再次更改了问题标题)。我真正关心的是在 Cairo 和 GTK/GDK 之间创建一个永久的双缓冲像素阵列,而不是一个临时的双缓冲像素阵列。似乎最简单的方法是使 GTK 窗口成为 Cairo 曲面,并使双缓冲区成为另一个 Cairo 曲面。由于我在我的问题中要求提供样本,因此这里有一些:

另一个很快出现的棘手问题是,我希望这是一个 WYSISWYG 绘图环境,可以立即绘制 Python 要求它绘制的内容 --- 并且可以扩展到动画。但是,大多数 GTK 示例都不是这样设置的:事件处理被推迟到我调用gtk.main(). (或者在 Python 中,我惊讶地发现它raw_input()也以某种方式刷新了 GTK 事件队列。)我找到了一个很好的解释,带有 Python 示例,可以替代将事件控制权交给 GTK。最简单的解决方案也可能是我将采用的解决方案是,只要您想这样做,就可以使用它来刷新事件缓冲区:

我还需要最后一件事,刷新像素缓冲区和事件缓冲区。看起来这样做的一种方法是window.queue_draw()

0 投票
4 回答
5123 浏览

python - py2cairo 安装失败。检查 'cairo' >= 1.10.0:未找到

我正在尝试使用 32 位 Python 2.7(来自 python.org)和来自 MacPorts 的 cairo 1.10.2 在我的 OS X 10.5 上安装 PyCairo(来自 tarball 源)。所以我正在安装“py2cairo”。当我跑步时python ./waf configure,我得到

我这里有开罗文件...

但是我将哪个目录传递给哪个参数?这些看起来与指定 cairo 库无关:

0 投票
0 回答
1134 浏览

python - 将向量 matplotlib 绘图和 pycairo 绘图绘制到同一个 pdf 文件中

我正在使用 Matplotlib 和 Pycairo 生成 PDF 报告(仍处于草图阶段)。我有意避免将 ReportLabs 作为设计选项和 Pycairo 技能的练习。

目前,我正在使用plt.get_current_fig_manager().canvas将图作为栅格插入,但我想更改它,以便获得仅矢量的 PDF 以进行出色的打印,并且文件大小可能不那么大。

我的工作代码如下:

问题是:我如何使用这个脚本中的 matplotlib 来获得最终 pdf 中的矢量图,而不是光栅。

或者换一种说法:是否可以将 Pycairo 和 Matplotlib 中的矢量数据“混合”(写入)到同一个 PDF 目标文件中?

0 投票
4 回答
4171 浏览

python - 在 pycairo 中围绕其中心旋转文本

社区。

我知道这里有很多答案、手册、教程和互联网上的参考资料,以及关于这个问题的更多信息。我也知道需要线性代数的知识。但是,当我考虑是时候弄清楚所有的理论并在实践中解决练习时 - 我的头晕了,我不能做最简单的事情:(

拜托,如果您知道一个快速的解决方案,如何在渲染之前使文本在其中心上旋转 - 请告诉我。

现在我有:

但我的信并没有绕着自己转。这就像跌倒在右侧 :( 我知道我的代码不正确。也许我错过了转换,但我不知道如何使它正确。

更新:不幸的是,文本不受翻译的影响,所以

将与

而且我不知道如何在不制作新表面或其他东西(如图形处理器中的新图层)的情况下使文本在其中心旋转:(

0 投票
0 回答
883 浏览

python - 为 igraph 安装 pycairo 有什么问题?

我按照此处的说明 在 win 上安装 pycairo 并能够在 igraph 中使用绘图

我有 python 2.7 pycairo 1.8.10

和上面链接中写入的具有相同编号的 dll 文件,然后我使用了编写的测试,但我得到了消息:

错误导致无法显示照片或视频。错误代码:0x800706ba


尝试保存到文件时,我也收到以下错误。

这给出了以下错误:

Traceback(最近一次调用最后一次):文件“”,第 1 行,在

文件“C:\Program Files (x86)\Python27\lib\site-packages\igraph\drawing__init__.py”,第 438 行,在图中

结果.save()

文件“C:\Program Files (x86)\Python27\lib\site-packages\igraph\drawing__init__.py”,第 299 行,保存

返回 self._surface.write_to_png(fname)

IOError:写入输出流时出错

为什么这不起作用?

0 投票
7 回答
43238 浏览

python - 如何在 Windows 上安装 PyCairo(Python 的 Cairo)?

今天下午我花了几个小时试图找到一个在 Windows 上安装 PyCairo 的简单教程。

Cairo 项目本身不维护 Windows 二进制文件,它们必须在其他地方下载(例如http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/)。

由于 MSVC 显然不是 PyCairo 支持的编译器(尽管源补丁很简单),这一过程显然也更加复杂。请参阅此错误报告:

https://www.libreoffice.org/bugzilla/show_bug.cgi?id=22940

谁能推荐一个在 Windows 上安装 PyCairo 的教程?

0 投票
3 回答
6006 浏览

python - “手动”调用 gtk.DrawingArea 上的公开事件

我正在创建一个用于数据可视化的小工具。GUI 是用 Pygtk 创建的,非常简单。用户输入文件名后,他可以按“calc”按钮查看输出。输出由 pycairo 渲染并呈现在 gtk.DrawingArea 中。

该应用程序的工作方式如下:当按下按钮时,文件被处理,其内容存储在一个特殊的类中。此类是一个自定义容器:它与 gui 一起实例化,并且为空或填充。DrawingArea 的暴露事件链接到一个绘图函数,该函数读取容器并绘制其内容。只要容器为空,DrawingArea 就保持为空,但在单击 calc 并加载文件后,DrawingArea 应该填充我的视觉效果。

问题是:一切正常,除了更新绘图区。我不知道如何手动调用暴露。按下 calc 后,我必须调整窗口大小才能看到结果。

更具体:我从教程中复制了这段代码,不知道如何自己提供参数事件:

0 投票
2 回答
3501 浏览

python - 将 Gtk.DrawingArea 或 Cairo 模式的内容保存到磁盘上的图像

我有一个使用Cairo 图像表面的小型 PyGI 项目,然后我使用表面图案对其进行缩放并在 Gtk.DrawingArea 上进行渲染。

我想将缩放版本写入 PNG 文件。我尝试使用Surface.write_to_png()从原始表面写入,但它只写入原始(即非缩放)大小,所以我被困在那里。

然后我想我也许可以从 Gtk.DrawingArea 获取渲染图像并将其写入磁盘,但我还没有找到如何在 PyGI 中做到这一点(这似乎只有在 GTK+ 2 中才有可能 -将 gtk.DrawingArea 保存到文件)。所以我试图弄清楚如何将我的缩放图像写入磁盘。

下面是创建表面、放大和渲染表面的代码:

这是将表面写入PNG文件的代码:

所以写表面会创建一个不缩放的图像,并且在 cairo.SurfacePattern 中也没有 write 方法。

我最后的手段是获取在 gtk.DrawingArea 中呈现的缩放图像,将其放入 GtkPixbuf.Pixbuf 或新表面,然后将其写入磁盘。pixbuf 方法似乎适用于 GTK+ 2,但不适用于 GTK+ 3。

那么有谁知道我如何将缩放后的图像写入磁盘?

0 投票
1 回答
3734 浏览

image - 如何使用 Pycairo 输出透明的 PNG?

这是我的代码:

如您所见,我正在为这个 PNG 绘制一些白色文本,但背景默认为不透明的黑色。如何使 png 透明以便只显示白色文本?