尝试在 python 中拖动乌龟时内核崩溃
Kernel crashes when trying to drag a turtle in python
我决定使用内置的乌龟来显示我的整个程序,但如果有更好的选择,你也可以把它留在这里。
所以,当我使用 turtle 并将一个函数绑定到左键单击拖动时,它最终工作正常,但仅适用于较慢的鼠标速度,因此,在崩溃我的内核并给出之前的短时间内我遇到了致命的 "stack overflow" 错误。
代码:
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)
您的代码存在几个问题:
您没有在事件处理程序中禁用事件,这导致
到你的致命 "stack overflow" 错误。
你绕过了turtle自己的事件机制,使用了tkinter的
支撑。有时这是必要的,但它不是该去的地方
开始。
您不需要关闭 tracer()
,因为您没有画任何东西。
下面是我对您的代码进行的修改,我相信它可以实现您的基本目标。你可以干净利落地在屏幕上拖动乌龟,它会随着你的成长而成长。你可以点击屏幕上的任何地方,乌龟会来找你长大:
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()
我决定使用内置的乌龟来显示我的整个程序,但如果有更好的选择,你也可以把它留在这里。
所以,当我使用 turtle 并将一个函数绑定到左键单击拖动时,它最终工作正常,但仅适用于较慢的鼠标速度,因此,在崩溃我的内核并给出之前的短时间内我遇到了致命的 "stack overflow" 错误。
代码:
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)
您的代码存在几个问题:
您没有在事件处理程序中禁用事件,这导致 到你的致命 "stack overflow" 错误。
你绕过了turtle自己的事件机制,使用了tkinter的 支撑。有时这是必要的,但它不是该去的地方 开始。
您不需要关闭
tracer()
,因为您没有画任何东西。
下面是我对您的代码进行的修改,我相信它可以实现您的基本目标。你可以干净利落地在屏幕上拖动乌龟,它会随着你的成长而成长。你可以点击屏幕上的任何地方,乌龟会来找你长大:
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()