我已将一个键绑定到一个函数,该函数可使椭圆形(包括在其他相同的椭圆形列表中)移动一定距离。我希望它在每次按下该键时都进行一个新的椭圆移动,而如果路线还没有结束,则不停止前一个椭圆移动。
使用我的代码,按'c',我将一个新的椭圆形随机放置在画布上,并保存在字典中。每个新椭圆都保存为key ='compteur',对于每个创建的新椭圆,以'compteur'递增,以确保不会在先前的现有椭圆上创建每个椭圆。 通过按“ m”,我希望每次按该键时都进行一个新的椭圆移动,而前一个不停。
from tkinter import *
import time
from random import *
import time
compteur = 0
dic = {}
w = Tk()
w.geometry('400x400')
c = Canvas(w, width = 400, height = 400)
c.pack()
dic[compteur] = c.create_oval(200,150,250,200,fill = 'pink')
compteur += 1
def create(event):
global compteur
b = randrange(300)
dic[compteur] = c.create_oval(200,b,250,(b+50),fill = 'pink')
compteur += 1
def move(event):
rond = dic[randrange(len(dico))]
if c.coords(rond)[0] == 200:
for x in range (15):
c.move(rond,-10,0)
w.update()
time.sleep(0.15)
w.bind('<m>', move)
w.bind('<c>',create)
w.mainloop()
我显然缺少一些东西,但是作为一个初学者,我不知道为什么一次只能移动一个椭圆。而且奇怪的是,一旦第二个椭圆完成了路线,第一个也开始再次完成它的路线。
感谢您的帮助:)
答案 0 :(得分:1)
我使用列表保留所有圈子。
在move()
中,仅当我按下<m>
在move_other()
中,我移动了除上一个以外的所有圆圈,并使用after()
在100ms(0.1s)之后运行move_other()
,因此它将一直移动。
from tkinter import *
from random import *
# --- fucntions ---
def create(event):
b = randrange(300)
circles.append(c.create_oval(200, b, 250, (b+50), fill='pink'))
def move(event):
item = circles[-1]
c.move(item, -10, 0)
def move_other():
for item in circles[:-1]:
c.move(item, -10, 0)
w.after(100, move_other)
# --- main ---
circles = []
w = Tk()
w.geometry('400x400')
c = Canvas(w, width=400, height=400)
c.pack()
circles.append(c.create_oval(200, 150, 250, 200, fill='pink'))
move_other() # start moving other circles
w.bind('<m>', move)
w.bind('<c>', create)
w.mainloop()