如何通过按键停止“ turtle.onscreenclick”功能?

时间:2019-04-06 17:13:15

标签: python multithreading multiprocessing turtle-graphics

我制作了一个简单的程序,使您可以单击屏幕上的图来使用乌龟绘制东西。您移动到的每个点都记录在一个数组中。当用户完成绘制内容时,我想使用JSON将这个数组写入文本文件。

keytool -list -printcert -jarfile yourapkname.apk

import turtle from turtle import Turtle, Screen pastMovementsX = [0] pastMovementsY = [0] screen = Screen() screen.setup(500, 350) screen.screensize(600, 600) def move(x, y): moveto = turtle.goto(x, y) pastMovementsX.append(turtle.xcor()) pastMovementsY.append(turtle.ycor()) turtle.onscreenclick(move) 之后的任何代码都不会运行。我认为它会一直检查屏幕上的单击,因此无法继续执行该程序。

我尝试了几件事。尤其是线程和多处理可以做到这一点。它没有用,经过一番研究后,乌龟模块似乎不喜欢或不能很好地与线程/多处理一起使用。

如何在按键后使程序停止turtle.onscreenclick()并继续执行其他代码?

1 个答案:

答案 0 :(得分:0)

  

turtle.onscreenclick()之后的任何代码都不会运行。我认为   一直在检查屏幕上的点击,因此无法继续   该程序。

您的问题无效,因为前提不正确:

from turtle import Turtle, Screen

def move(x, y):
        moveto = turtle.goto(x, y)
        pastMovementsX.append(x)
        pastMovementsY.append(y)

pastMovementsX = [0]
pastMovementsY = [0]

screen = Screen()
screen.setup(500, 350)
screen.screensize(600, 600)

turtle = Turtle()

screen.onclick(move)

turtle.circle(50)

screen.mainloop()

onclick()方法将设置处理程序函数,并继续执行下一条语句,它不会检查。这是通过tkinter事件循环完成的,该循环由程序中的最后一个mainloop()调用转移到该循环。

我的猜测是您没有正确考虑代码计划采取的行动顺序,并描述这些行动可能有助于解决您的实际问题。