#python #multithreading #multiprocessing #turtle-graphics
#python #многопоточность #многопроцессорная обработка #черепаха-графика
Вопрос:
Я создал простую программу, которая позволяет вам нажимать на экран, чтобы рисовать что-то с помощью turtle. Каждая точка, к которой вы перемещаетесь, записывается в массив. Я хочу записать этот массив в текстовый файл, используя 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:
Любой код после 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()
вызове в программе.
Я предполагаю, что вы неправильно представляете последовательность действий, которые планирует выполнить ваш код, и их описание может помочь решить вашу реальную проблему.