我写了这段代码,在tkinter中创建了一个椭圆形。当用鼠标单击时,椭圆会为其自身创建新坐标,然后开始脉动。
它是这样的:1.默认情况下创建椭圆。2.单击时,将调用“点击”功能。3.click函数生成新坐标,绘制椭圆,然后开始脉动循环效果。4.现在,我应该能够并且可以再次单击脉动的椭圆,将椭圆移动到新位置,然后再次循环该新椭圆(脉动)。
def click(event):
pick = 2
counter = 0
esimene_x1 = randint(0, w-100)
esimene_y1 = randint(0, h-100)
teine_x1 = esimene_x1
teine_y1 = esimene_y1
canvas.coords(circle1, esimene_x1, esimene_y1, teine_x1, teine_y1)
pulsate(esimene_x1, esimene_y1, teine_x1, teine_y1, pick, counter)
def pulsate(esimene_x1, esimene_y1, teine_x1, teine_y1, pick, counter):
if pick % 2 == 0:
esimene_x1 -= 1
esimene_y1 -= 1
teine_x1 += 1
teine_y1 += 1
counter += 1
if counter == 40:
pick += 1
elif pick % 2 != 0:
esimene_x1 += 1
esimene_y1 += 1
teine_x1 -= 1
teine_y1 -= 1
counter -=1
if counter == 0:
pick += 1
s = esimene_x1, esimene_y1, teine_x1, teine_y1, pick, counter
canvas.coords(circle1, esimene_x1,esimene_y1, teine_x1,teine_y1)
raam.after(50, pulsate, *s)
但是,当我现在再次单击脉动椭圆时,它似乎有点bug,并且看起来像以前的循环脉动效果函数仍在起作用,新的脉动始于不同的坐标。所以,我的问题是,当该函数在函数中时,如何停止该函数的循环(脉冲),而我想再次启动第一个函数。(创建新坐标并开始脉动)
这是您可以运行的文件,可以确切地看到发生了什么:
https://mega.co.nz/#!e5pj0brC!QW6R4X9WTshOCh3FTybLrQu_oI0OOU6wL5QI61punUE
另外,如果您发现其他可能导致此错误的原因,请告诉我。我尚未掌握python中的线程和类知识,但是如果这是唯一的解决方案,请告诉我!否则,如果可以使用一些更简单的方法来管理它,将不胜感激!
非常感谢你!
那不是虫子。您的click
方法触发该pulsate
方法,然后再次触发自身。如果click
再次调用,它将pulsate
再次触发,但这是pulsate
(缺少更好的用语)的另一个“实例”,没有引用另一个同时运行的实例。
相反,您应该使用global
变量来保存椭圆坐标。click
然后,您的方法将设置这些坐标,例如global oval; oval = esimene_x1, esimene_y1, teine_x1, teine_y1
,但不会触发pulsate
。而是pulsate
在应用程序启动时被调用一次,然后再次触发自身,就像在您的代码中一样。椭圆形坐标不会pulsate
作为参数传递,而是从全局变量读取。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句