微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在画布python上移动对象

如何解决在画布python上移动对象

我想让一个小方块每 3 秒向左移动 10 个像素,我的代码如下。我不确定为什么它只移动一次。一些帮助将不胜感激!

...
[11] 40678/tcp                  ALLOW IN    Anywhere
[12] 5432/tcp                   ALLOW IN    Anywhere
[13] 888/tcp (v6)               ALLOW IN    Anywhere (v6)
[14] 20/tcp (v6)                ALLOW IN    Anywhere (v6)
[15] 21/tcp (v6)                ALLOW IN    Anywhere (v6)
[16] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[17] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[18] 39000:40000/tcp (v6)       ALLOW IN    Anywhere (v6)
[19] 8888/tcp (v6)              ALLOW IN    Anywhere (v6)
[20] 8443/tcp (v6)              ALLOW IN    Anywhere (v6)
[21] 8443/udp (v6)              ALLOW IN    Anywhere (v6)
[22] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
[23] 40678/tcp (v6)             ALLOW IN    Anywhere (v6)
[24] 5432/tcp (v6)              ALLOW IN    Anywhere (v6)

解决方法

mainloop() 运行循环,该循环在您关闭窗口之前一直有效 - 因此它会阻止所有循环并且仅执行一次并且仅移动矩形一次。在您的版本中,您应该删除 mainloop() 并且它不会阻止它 - 因为您在循环中使用 update() 所以它会正确运行。

但是你可以用不同的方式来做到这一点。

您可以在 3 秒后使用 root.after(3000,draw_rect) 执行 draw_rect()。并且 draw_rect() 应该再次运行 root.after(3000,draw_rect) 以在 3 秒后再次运行它 - 这样它就会循环并且不会被 mainloop() 阻塞(mainloop() 将运行 {{1 }} 每 3 秒)

draw_rect() 具有函数 Canvas,因此您不必删除矩形并重新创建它。

我使用 move(object,dx,dy) 使其运行得更快。

300ms

PEP 8 -- Style Guide for Python Code


编辑:

使用变量 import tkinter as tk # --- constants --- (PEP8: UPPER_CASE_NAMES) WIDTH = 400 HEIGHT = 400 # --- functions --- def move_rect(): canvas.move(c1,-10,0) # move left canvas.move(c2,10,0) # move right # run again after 300ms root.after(300,move_rect) # 300ms = 0.3s # I use smaller value to make it faster # --- main --- x1 = y1 = WIDTH / 2 root = tk.Tk() canvas = tk.Canvas(root,width=WIDTH,height=HEIGHT) canvas.pack() c1 = canvas.create_rectangle(x1,y1,x1 + 10,y1 + 10,fill="green") c2 = canvas.create_rectangle(x1,fill="red") # run first time after 300ms root.after(300,move_rect) # 300ms = 0.3s # I use smaller value to make it faster root.mainloop() ,speed1 在矩形靠近边界时改变方向的版本。

speed2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。