我正在寻找一个用于创建操作几何形状的画布的Python库。具体来说,我需要能够创建任意多边形并将它们放在画布上,多边形需要具有透明/具有alpha通道的能力,我需要能够编辑当前在画布上的多边形,我需要能够获得给定像素的实际颜色(所有透明片的聚合)。
基本上我是想在python中创建这个:http://alteredqualia.com/visualization/evolve/。
答案 0 :(得分:5)
我认为cairo会做很多你想要的事情。他们也有python bindings。
这对您无法帮助的一个要求是修改以前绘制的多边形,但我不知道任何画布会为您做到这一点。
答案 1 :(得分:2)
听起来像是OpenGL的工作。
我的建议是,无论您选择哪个库,都可以为适合您算法的多边形创建数据结构,以便它们更简单易读,而不是尝试让这些算法直接操作画布。然后你可以编写将它们分开(即独立)主逻辑的代码。
答案 2 :(得分:2)
This discussion on Stackoverflow在Python的各种GUI工具包上进行了一些比较和代码片段。我非常确定QGraphicsView上的QT会有透明度。诺基亚(nee Troll)为QT制作了一个演示套件,可以让你了解它的功能。
答案 3 :(得分:1)
Pygame应该可以为你做到这一点。
参见pygame.draw.polygon
答案 4 :(得分:1)
试试pyglet。它是一个使用OpenGL的Python图形库。如果您之前已经完成了OpenGL编程,那么它肯定是获得您想要的最简单的方法。
答案 5 :(得分:1)
我相信HTML画布允许您修改元素
没有。您可以查看我的HTML canvas tutorial以了解您如何绘制移动球;你擦拭屏幕并在你想要的位置画一个新的圆圈。
你可以在pyglet,pygame,QT,Tkinter,wxPython和cairo的所有画布中绘制简单的形状。
通常,您将拥有名为“sprite”或“shapes”的对象来表示绘制到屏幕上的对象,并且您将它们全部存储在容器中。然后,库或框架将在每一帧将它们全部渲染到画布上。因此,用户(您)似乎可以修改屏幕上的对象;你设置一个球的x和y坐标,然后在下一帧中渲染它。然而,在较低的水平,一切都被擦除并重新绘制。
对于计算密集型动画,将使用一种称为double-buffering的技术,从而修改内存中的位图而不是屏幕上的位图,然后绘制过程只是将该位图复制到屏幕上。 / p>
更改列表中的项目,然后创建一个新的画布,这似乎会产生很大的开销。
上面提到的所有框架都会为你绘制的对象列表提供一个很好的抽象,这样你就不需要手动维护了它,你可以编程就像你绘制的精灵/形状一样直接移动到屏幕上,即使它们确实没有达到低水平。
答案 6 :(得分:0)
我相信HTML画布允许你修改元素,这让我相信可能还有另一个画布。但是,如果没有,那基本上要求我保留所有多边形的单独列表,当我想要进行更改时,更改列表中的项目,然后创建一个新的画布,这似乎会有一个重要的开销。
答案 7 :(得分:0)
Qt和wxWidgets都有一些画布绘制功能(Qt称之为GraphicsView)。快速Google搜索会为您提供大量示例,以便您了解它是否符合您的要求。