【问题标题】:Simple animations in Python 2.7 [duplicate]Python 2.7中的简单动画[重复]
【发布时间】:2016-06-22 15:31:57
【问题描述】:

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

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

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

【问题讨论】:

  • 本站有很多关于动画的问答。在提出问题之前,您应该进行更多研究,尝试其他答案中的一种解决方案,然后在遇到困难时再回来提出特定问题。
  • 完整的工作示例见stackoverflow.com/questions/6740855/…

标签: python python-2.7 tkinter


【解决方案1】:

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 编辑:那是旧的而不是规范的 This one's slightly better有关使用计时器循环制作动画的一般资料,here's Bryan agian

Bryan 还指出,您可以直接使用像素You can do that with PhotoImage

无需图形扩展的类数组像素访问

像 pygame 这样的强大模块将是最具可扩展性的选项。但是,我通过修改 numpy 数组的元素和 displaying it as an image (you also need this link to display the images) 成功地编写了图形引擎(仅在教育环境中)。

这让您可以进行像素级修改;由于编写修改 numpy 数组的 C 扩展相对简单,因此您可以对快速图像处理进行原型化,以进行自定义操作。虽然我以这种方式仅使用 tkinter 编写了 whole graphics engines,但我只能将其推荐用于教育目的。

否则,只好硬着头皮拉入openGl 或pygame。从长远来看,您将为自己节省大量时间。

总结

  • 非常简单的动画可以直接在 tkinter 中完成
  • 出于教育目的,您可以使用 numpy 和 tkinter 制作任意图形
  • 对于 rhobust 动画,请查看适合您需求(图形渲染、统计图形、游戏开发等)的完整库(openGl、matplotlib、pygame)

【讨论】:

  • 无需在画布上删除和重新创建项目。您可以移动现有项目。另外,您指的是做动画的规范示例,但该示例绝对不是规范的。最后,使用 tkinter 处理图像中的单个像素是完全可能的。它有点慢,但如果您不一次更改太多单个像素,它已经足够快了。
  • @BryanOakley 更好吗?我觉得这个来源对于 1998 年的时间旅行者来说已经足够规范了 :) (没有查看我抓取 effbot 页面的日期)。 PIL 方法是您所说的像素操作吗?我见过你写 tcl 扩展来修改小部件,但我不熟悉任何 tkinter-native 直接像素访问例程
  • 您不需要 PIL 来操作像素。 PhotoImage 类(tkinter 的一部分)具有获取和设置像素的方法。
  • @BryanOakley 哦...是的,这就是我发布的链接所使用的。我以为 PhotoImage 在 PIL 中……哎呀。我也会做那个编辑
猜你喜欢
  • 2011-10-04
  • 2022-11-09
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2021-11-11
  • 2016-10-30
相关资源
最近更新 更多