gpt4 book ai didi

Python:如何停止函数内的循环函数?

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:42 25 4
gpt4 key购买 nike

我写了这段代码,它在 tkinter 中创建了一个椭圆。当鼠标点击时,椭圆会为自己创建新的坐标,然后开始跳动。

它是这样的:1.默认创建椭圆2.单击时,调用函数“单击”3.点击功能生成新坐标,绘制椭圆,然后开始脉动循环效果。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)

但是,当我现在再次单击脉动椭圆时,它有点错误,看起来以前的循环脉动效果函数仍在执行它的操作,新的脉动开始于不同的坐标。所以,我的问题是,当该函数在函数中时,我如何停止循环(脉动)函数,并且我想再次启动第一个函数。 (创建新坐标并开始脉动)

这是您可以运行并准确查看似乎发生了什么的文件:

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,而是从全局变量中读取。

关于Python:如何停止函数内的循环函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com