2016-03-08 72 views
-4

在Python 2.7中,我想要显示一些简单的图形,例如红色方块在蓝色窗口上移动。在每一帧上,我想更新正方形的位置,并渲染新窗口。我正在寻找简单和轻量级的东西。Python 2.7中的简单动画

我见过人们使用matplotlib绘制形状,但我不想处理轴和数据点。我也看过pygame的建议,但这似乎是我想要的重量级,因为我不想创建一个游戏,只是一个简单的动画。

所以我真正想要的是在每一帧上,我只是指出图像上每个像素的颜色,然后显示该图像。有什么好的建议?

+0

There a在本网站上重新提供许多与动画相关的问题和答案。在提出问题之前,你应该做更多的研究,在其他答案中尝试其中一种解决方案,然后在遇到困难时再回来询问具体问题。 –

+0

有关完整的工作示例,请参阅http://stackoverflow.com/questions/6740855/board-drawing-code-to-move-an-oval/6789351#6789351 –

回答

2

Tkinter不适合设置单个像素。如果你想移动长方形或椭圆形(小椭圆看起来像一个像素,但它不能缩放以更新整个图像)。

def update(x,y): 
    canvas.delete('all') 
    canvas.create_rectangle(x-1,y-1,x+1,y+1) 

您当然可以更明智地保存矩形的返回值,然后只清除适当的元素。或者,您可以像Bryan指出的那样直接移动现有的元素。 As he explains elsewhere Tkinter当然支持绘制图像,椭圆形和其他东西。 Here's a canonical source编辑:这是旧的,不canoncialThis one's slightly better有关使用定时器循环动画一般的来源,here's Bryan agian

布赖恩还指出,你可以直接像素的工作You can do that with PhotoImage。不带图形扩展

类似数组的像素访问像pygame的一个强大的模块将是最具扩展性的选择。不过,我通过修改numpy数组的元素,然后displaying it as an imageyou also need this link to display the images),成功(在教育设置中只有)编写图形引擎。

这可以让你做像素级修改;因为编写修改numpy数组的C扩展比较简单,所以您可以对快速图像处理进行原型制作,以执行自定义操作。虽然我用这种方法写了whole graphics engines,但我只能推荐它用于教育目的。

否则,只要硬着头皮,拉openGl或pygame。长远来看,你会为自己节省很多时间。

摘要

  • 很简单的动画可以直接在Tkinter的
  • 教育目的来完成,你可以做任意图形与numpy的和Tkinter的
  • 对于rhobust动画,检查出一个完整的库(openGl,matplotlib,pygame)适合您的需求(图形渲染,统计制图,游戏开发等)
+1

无需删除并重新创建画布上的项目。您可以移动现有的项目。另外,你提到了做动画的典型例子,但这个例子绝对不是规范的。最后,使用tkinter可以处理图像中的单个像素。这有点慢,但是如果你不一次改变太多个别像素,速度就够快了。 –

+0

@BryanOakley更好?我觉得这个源码对于1998年的时间旅行者来说已经足够规范:)(没有看看我抓住effbot页面的日期)。 PIL方法是什么意思的像素操作?我见过你编写tcl扩展来修改小部件,但我不熟悉任何tkinter本地直接像素访问例程 –

+0

你不需要PIL来操纵像素。 [PhotoImage](http://tkinter.unpythonic.net/wiki/PhotoImage)类(tkinter的一部分)具有获取和设置像素的方法。 –