我正在寻找一个 Python 库来创建用于操作几何形状的画布。具体来说,我需要能够创建任意多边形并将它们放置在画布上,多边形需要能够透明/具有 alpha 通道,我需要能够编辑当前在画布上的多边形,我需要能够获得给定像素的实际颜色(所有透明部分的集合)。
基本上我正在尝试这样做:http ://alteredqualia.com/visualization/evolve/ in python。
听起来像是OpenGL的工作。
我的建议是,无论您选择哪个库,都要为多边形创建一个适合您算法的数据结构,以便它们更简单和可读,而不是尝试让这些算法直接操作画布。然后,您可以编写将它们与主逻辑分开(即独立)的代码。
这个关于 Stackoverflow 的讨论对Python 的各种 GUI 工具包进行了一些比较和代码片段。我很确定QT上的QGraphicsView会做到透明。诺基亚 (nee Troll) 为 QT 制作了一个演示套件,可以让您了解它的功能。
我相信 HTML 画布可以让您修改元素
它不是。您可以查看我的HTML 画布教程,了解如何绘制移动球;你擦拭屏幕并在你想要的位置画一个新的圆圈。
您可以在所有 pyglet、pygame、QT、Tkinter、wxPython 和 cairo 中将简单的形状绘制到画布上。
通常,您将拥有称为“精灵”或“形状”的对象,它们代表绘制到屏幕上的对象,并且您会将它们全部存储在一个容器中。然后库或框架将在每一帧将它们全部渲染到画布上。因此,在用户(您)看来,您可以修改屏幕上的对象;您设置一个球的 x 和 y 坐标,并在下一帧中渲染它。然而,在低级别,一切都被擦除并重新绘制。
对于计算密集型动画,将采用一种称为双缓冲的技术,其中将修改内存中的位图而不是屏幕上的位图,然后绘制过程将简单地将该位图复制到屏幕上。
更改列表中的项目,然后创建一个新的画布,这似乎会产生很大的开销。
上面提到的所有框架都会给你一个很好的抽象对象列表来绘制,这样你就不需要手动维护它,你可以像你绘制的精灵/形状可以直接移动一样编程在屏幕上,即使他们真的不在低水平。
Pygame应该能够为您做到这一点。
见 pygame.draw.polygon
尝试pyglet。它是带有 OpenGL 的 Python 图形库。如果你以前做过 OpenGL 编程,那肯定是得到你想要的最简单的方法。
I believe the HTML canvas lets you modify elements, which makes me believe there might be another canvas that can as well. However, if there is not that would basically require me to keep a separate list of all the polygons and when I wanted to make a change, alter the item in the list and then create a new canvas, which seems like it would have a significant overhead.
Both Qt and wxWidgets have some canvas drawing abilities (Qt calls it GraphicsView). Quick Google searches will get you a lot of examples so you can see if it fits your requirements.