Skip to main content
 首页 » 编程设计

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

2025年05月04日9qq号

我写了这段代码,它在 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,而是从全局变量中读取。