Как остановить функцию turtle.onscreenclick нажатием клавиши? - PullRequest
0 голосов
/ 06 апреля 2019

Я сделал простую программу, которая позволяет вам нажимать на экран, чтобы рисовать вещи, используя черепаху.Каждая точка, к которой вы двигаетесь, записывается в массив.Я хочу записать этот массив в текстовый файл, используя JSON, когда пользователь закончит что-то рисовать.

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() не будет работать.Я предполагаю, что он продолжает проверять наличие щелчка на экране и поэтому не может продолжить работу с программой.

Я попробовал пару вещей.Особенно многопоточность и многопроцессорность, чтобы сделать это.Это не сработало, и после небольшого исследования кажется, что модуль turtle не любит или не работает с многопоточностью / многопроцессорностью.

Как мне заставить программу остановиться turtle.onscreenclick() и продолжить с дальнейшим кодомпосле нажатия клавиши?

1 Ответ

0 голосов
/ 06 апреля 2019

Любой код после 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() в программе.

Полагаю, вы не правильно думаете о последовательности действий, которые ваш код планирует выполнить, и описываете их, которые могут помочь в решении вашей реальной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...