将Python turtle turtle exitonclick()函数绑定到另一个键

时间:2018-08-14 01:20:33

标签: python python-2.7 turtle-graphics

我正在使用Python 2.7乌龟图形制作一个简单的鼠标传感器,只要按住鼠标按钮即可绘制。由于我的功能基于用户,因此在您运行它时会立即崩溃。我发现turtle.exitonclick()将有助于保持界面的打开状态,但是我无法进行绘制,因为我的绘制已绑定到鼠标左键单击上。有什么解决方法可以解决此问题,或者可以将turtle.exitonclick()重新绑定到其他东西吗?这是我的代码:

import turtle


wn = turtle.Screen()
wn.bgcolor("lightblue")

#wn.screensize(400,300)
turtle.setup(400,300)

draw = turtle.Turtle()

def gothere(event):
    draw.penup()
    draw.goto(event.x-360, 340-event.y)
    draw.pendown()
    #draw.color(blue)

def movearound(event):
    draw.goto(event.x-360, 340-event.y)
    draw.color(blue)

def release(event):
    draw.penup()

def reset(event):
    draw.clear()

cavset = turtle.getcanvas()

cavset.bind("<Button-2>", gothere)
cavset.bind("<B1-Motion>", movearound)
cavset.bind("<ButtonRelease-2>", release)
cavset.bind("<Escape>", reset)

wn.listen()
wn.exitonclick()

(我正在通过命令提示符运行,顺便说一句。)

1 个答案:

答案 0 :(得分:0)

您最可能想要的是:

turtle.mainloop()

代替:

wn.exitonclick()

这是exitonclick()在为“ onclick”部分设置处理程序后调用的内容。

但是,还有其他问题。您似乎在混合三种不同的编码模型:乌龟的功能接口;面向对象的乌龟接口;呼唤乌龟的Tkinter基础。

让我们简化一下,只使用面向对象的界面来实现乌龟:

from turtle import Turtle, Screen, mainloop

def gothere(x, y):
    draw.penup()
    draw.goto(x, y)
    draw.pendown()

def movearound(x, y):
    draw.ondrag(None)  # disable handler in handler!
    draw.color("blue")
    draw.goto(x, y)
    draw.ondrag(movearound)

def release(x, y):
    draw.penup()

def reset():
    draw.clear()

wn = Screen()
wn.setup(400, 300)
wn.bgcolor("lightblue")

draw = Turtle()

wn.onclick(gothere, 2)

draw.ondrag(movearound)
draw.onrelease(release, 2)

wn.onkey(reset, "Escape")
wn.listen()

mainloop()

我相信Python 3乌龟会调整乌龟事件接口,以添加一些方法并为其他名称使用更清晰的名称。