编程语言
首页 > 编程语言> > 尝试在python中拖动乌龟时内核崩溃

尝试在python中拖动乌龟时内核崩溃

作者:互联网

我决定使用内置的乌龟来显示我的整个程序,但如果有更好的选择,你也可以把它留在这里.

因此,当我使用乌龟并将一个函数绑定到左键单击拖动时,它最终工作正常,但仅适用于慢速鼠标速度,因此,在崩溃我的内核并给我一个致命的“堆栈”之前的短时间内溢出“错误.

码:

from turtle import *
screen = Screen()
t1 = Turtle()
t1.shape("circle")
t1.pu()
bi = 1
ni = 1
screen.tracer(None, 0)
t1.speed(0)
screen.screensize(1000,1000)
def grow(ke):
    t1.goto(ke.x - 475,-ke.y + 400)
    global bi, ni
    t1.shapesize(bi,ni)
    bi += .004
    ni += .004
s2 = getcanvas()
s2.bind("<B1-Motion>", grow)
s2.bind("<Button-1>", grow)

解决方法:

您的代码有几个问题:

>你没有禁用事件处理中的事件,这是什么导致
致命的“堆栈溢出”错误.
>你绕过了龟自己的事件机制并使用了tkinter的事件机制
基础.有时这是必要的,但它不是那个地方
开始.
>您不需要关闭跟踪器(),因为您没有绘制任何东西.

下面是我对您的代码的修改,我相信这些代码可以实现您的基本目标.你可以干净地将乌龟拖到屏幕周围,它会像你一样长大.您可以点击屏幕上的任意位置,乌龟会来找你并成长:

from turtle import Turtle, Screen

def grow(x, y):
    global bi, ni

    turtle.ondrag(None)  # disable events when inside handler
    screen.onclick(None)

    turtle.goto(x, y)
    turtle.shapesize(bi, ni)

    bi += 0.04
    ni += 0.04

    turtle.ondrag(grow)
    screen.onclick(grow)

screen = Screen()
screen.screensize(1000, 1000)

turtle = Turtle('circle')
turtle.speed('fastest')
turtle.penup()

bi = ni = 1

turtle.ondrag(grow)
screen.onclick(grow)

screen.mainloop()

标签:python,python-3-x,turtle-graphics
来源: https://codeday.me/bug/20190705/1388553.html