Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于几何形状的Python画布库_Python_Algorithm_Canvas_Drawing - Fatal编程技术网

用于几何形状的Python画布库

用于几何形状的Python画布库,python,algorithm,canvas,drawing,Python,Algorithm,Canvas,Drawing,我正在寻找一个Python库,用于创建用于操纵几何形状的画布。具体来说,我需要能够创建任意多边形并将其放置在画布上,多边形需要能够透明/具有alpha通道,我需要能够编辑当前画布上的多边形,并且我需要能够获得给定像素的实际颜色(存在的所有透明块的集合) 基本上,我正在尝试这样做:在python中。应该能够为您做到这一点 参见pygame.draw.polygon我认为它可以做很多你想做的事情。它们也有 一个对您没有帮助的要求是修改以前绘制的多边形,但我不知道有哪种画布可以为您这样做。我相信HTM

我正在寻找一个Python库,用于创建用于操纵几何形状的画布。具体来说,我需要能够创建任意多边形并将其放置在画布上,多边形需要能够透明/具有alpha通道,我需要能够编辑当前画布上的多边形,并且我需要能够获得给定像素的实际颜色(存在的所有透明块的集合)

基本上,我正在尝试这样做:在python中。

应该能够为您做到这一点

参见pygame.draw.polygon

我认为它可以做很多你想做的事情。它们也有


一个对您没有帮助的要求是修改以前绘制的多边形,但我不知道有哪种画布可以为您这样做。

我相信HTML画布可以让您修改元素,这让我相信可能还有另一种画布也可以。但是,如果没有,基本上需要我保留所有多边形的单独列表,当我想做更改时,更改列表中的项目,然后创建一个新画布,这似乎会有很大的开销。

听起来像是一项工作


我的建议是,无论你选择哪个库,你都要为你的多边形创建一个适合你的算法的数据结构,使它们更简单易读,而不是试图让这些算法直接操作画布。然后你可以编写代码,将它们分开(即独立)绘制主要逻辑。

Qt和wxWidgets都有一些画布绘制功能(Qt称之为GraphicsView)。快速谷歌搜索将为您提供大量示例,以便您可以查看它是否符合您的要求。

对各种Python GUI工具包进行了一些比较,并提供了一些代码片段。我非常确信on将实现透明。诺基亚(nee Troll)为QT制作一个演示套件,让您了解它的功能。

试试看。这是一个使用OpenGL的Python图形库。如果您以前做过OpenGL编程,这肯定是获得所需功能的最简单方法


我相信HTML画布允许您修改元素


没有。你可以查看我的,看看你是如何画一个移动的球的;你擦屏幕,在你想要的地方画一个新的圆

您可以在pyglet、pygame、QT、Tkinter、wxPython和cairo中的所有画布上绘制简单的形状

通常,您将拥有称为“精灵”或“形状”的对象,这些对象表示绘制到屏幕上的对象,并将它们全部存储在一个容器中。然后库或框架将在每一帧将它们全部渲染到画布上。因此,用户(您)会觉得您可以修改屏幕上的对象;您可以设置球的x和y坐标,并在下一帧中渲染球。但是,在较低级别上,所有内容都将被擦除并重新绘制

对于计算密集型动画,将采用一种称为的技术,即修改内存中的位图而不是屏幕上的位图,然后绘制过程将只是将该位图复制到屏幕上

更改列表中的项目,然后创建一个新画布,这似乎会有很大的开销


上面提到的所有框架都将为要绘制的对象列表提供一个很好的抽象,这样您就不需要手动维护它,并且您可以编程,就好像您绘制的精灵/形状可以直接在屏幕上移动一样,即使它们真的不是处于较低的级别

“你擦了擦屏幕,然后在你想要的地方画了一个新的圆圈”-虽然这是真的,但从性能角度看,这不是一个真正的问题。我做了类似的事情,大部分时间都在比较图像(评估适合度),而不是绘图。惩罚不应该太大。我不是说这是性能问题,只是你不能修改画布上的元素;你必须绘制任何更改的内容。