![](/img/trans.png)
[英]How do i move multiple objects at the same time but every object by different distance in tkinter python?
[英]Python | Tkinter : Move multiple and different objects to gether
我已经搜索了很多,但是我找不到我需要的确切答案(或者我无法正确理解)。 在我的代码中有 1 个矩形,8 行。 他们正在同步移动。 但我想在我的 canvas 中添加一堆圆圈。 为此,我创建了很多行“create_oval”对象。 这是没有意义的,因为下一步我可能需要 canvas 中的数千个球。 我已经尝试了很多循环等,以找到一种用缩短方法创建圆圈的方法,但我无法实现我所需要的。 这是我的代码。
from tkinter import *
from random import randint
tk = Tk()
W, H =600, 500
canvas = Canvas(tk, width=W, height=H)
canvas.pack()
rectangle= canvas.create_rectangle(50, 250, 550, 50, fill="blue")
line1 = canvas.create_line(370, 70, 550,70,fill="black")
line2 = canvas.create_line(330, 90, 550,90,fill="black")
line3 = canvas.create_line(290, 110, 550,110,fill="black")
line4 = canvas.create_line(250, 130, 550,130,fill="black")
line5 = canvas.create_line(210, 150, 550,150,fill="black")
line6 = canvas.create_line(170, 170, 550,170,fill="black")
line7 = canvas.create_line(130, 190, 550,190,fill="black")
line8 = canvas.create_line(90, 210, 550,210,fill="black")
line9 = canvas.create_line(50, 230, 550,230,fill="black")
ball1 = canvas.create_oval(550,50,545,55, fill="red")
ball2 = canvas.create_oval(550,50,545,55, fill="red")
ball3 = canvas.create_oval(550,50,545,55, fill="red")
ball4 = canvas.create_oval(550,50,545,55, fill="red")
ball5 = canvas.create_oval(550,50,545,55, fill="red")
ball6 = canvas.create_oval(550,50,545,55, fill="red")
ball7 = canvas.create_oval(550,50,545,55, fill="red")
ball8 = canvas.create_oval(550,50,545,55, fill="red")
Xspeed = 10
Yspeed = 0
def moveTable():
global Xspeed,Yspeed
canvas.move(table, Xspeed, Yspeed)
canvas.move(line1, Xspeed, Yspeed)
canvas.move(line2, Xspeed, Yspeed)
canvas.move(line3, Xspeed, Yspeed)
canvas.move(line4, Xspeed, Yspeed)
canvas.move(line5, Xspeed, Yspeed)
canvas.move(line6, Xspeed, Yspeed)
canvas.move(line7, Xspeed, Yspeed)
canvas.move(line8, Xspeed, Yspeed)
canvas.move(line9, Xspeed, Yspeed)
canvas.move(ball1, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball2, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball3, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball4, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball5, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball6, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball7, Xspeed-randint(5,10),Yspeed+randint(5,10))
canvas.move(ball8, Xspeed-randint(5,10),Yspeed+randint(5,10))
left,top,right,bot = canvas.coords(table)
if(left == 60 or left == 40):
Xspeed = -Xspeed
canvas.after(100, moveTable)
moveTable()
tk.mainloop()
这可能很简单,但我看不到。
如果将标签分配给一个或多个小部件,则可以同时影响它们。
这是一个垂直移动所有红色项目和水平移动所有绿色项目的示例,所有这些都只使用两个move
命令:
import tkinter as tk
import random
root = tk.Tk()
canvas = tk.Canvas(root, background="black", width=400, height=400)
canvas.pack(fill="both", expand=True)
for i in range(20):
x = random.randint(10, 110)
y = random.randint(10, 110)
width = random.randint(10, 30)
height = random.randint(10, 30)
canvas.create_rectangle(x, y, x+width, y+height, fill="red", tags=("red",))
canvas.create_rectangle(x, y, x+width, y+height, fill="green", tags=("green",))
def animate():
canvas.move("red", 0, 1)
canvas.move("green", 1, 0)
canvas.after(20, animate)
animate()
root.mainloop()
您也可以将项目保存到列表并遍历列表
items = []
for i in range(100):
item = canvas.create_oval(...)
items.append(item)
...
for item in items:
canvas.move(item, ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.