Используя turtle.drag для записи перетаскиваемых точек, затем turtle.release для запуска кода, основанного на этих? - PullRequest
1 голос
/ 18 апреля 2019

Я использую модуль черепахи python, чтобы позволить пользователю рисовать изображения (относительно низкого разрешения).Я хочу, чтобы пользователь мог нажимать и перетаскивать изображение на экране.Цель состоит в том, чтобы нарисовать изображение в градациях серого 28x28.У меня уже есть необходимый код для рисования изображения (для простоты обработки он хранится в простой матрице).

Я могу рисовать с помощью функции turtle.onscreenclick ().Точно так же я все еще могу рисовать, используя turtle.ondrag (), но это абсурдно запаздывает и пропускает по экрану, если я постоянно перерисовываю свое изображение.
Мое решение состоит в том, чтобы ondrag () сохранял все точки, к которым обращается, в массиве кортежей.Вот где у меня проблемы.План состоит в том, чтобы использовать этот массив, чтобы затем обновлять матрицу-пустышку и обновлять экран только после перетаскивания (или каждый здесь и там для лучшей плавности).

def click(x, y):
    tim.goto(0, 0)
    updateArray(x,y) ##Updates the numpy array
    ##Refresh the screen
    tim.clear()
    drawArr(arr)#Draws the screen with the new array
    turtle.update()
dragArr = []
def drag(x, y):
    print("Dragging; X:", x, "Y:", y)
    dragArr.append((x, y))
def release(x, y):
    print(dragArr)
    for x, y in dragArr:
        print("X:", x, "Y:", y)
        updateArray(x,y)
    dragArr = []
    tim.clear()
    drawArr
    turtle.update()
drawArr(arr)
tim.goto(200, 0)
tim.color((128, 128, 128))
turtle.update()
tim.shapesize(stretch_wid = 10000, stretch_len = 10000) #Make the turtle larger for the sake of tim.ondrag(), 
#as it only works when you actually click on the turtle; eventually the turtle will be invisible

tim.showturtle()
tim.goto(0, 0)
turtle.update()
turtle.onscreenclick(click, 1, True)
turtle.onrelease(release, 1, True)
tim.ondrag(drag, 1, True)

Цель состоит в том, чтобы сделать две вещи;нарисуйте исходное изображение из массива numpy, а затем нарисуйте поверх него.В итоге я получаю, что функция ondrag () вызывает нормально;он печатает все пиксели попадания в консоли.Тем не менее, функция onrelease никогда не вызывается, и в консоли ничего не печатается.

Черепаха явно не требуется, хотя изначально она, казалось, отлично подходила для этой задачи.Изначально я работал с matplotlib, и, честно говоря, было бы лучше, если бы я знал, что я с ним делаю.При этом любое решение, которое работает, является именно этим;решение, которое работает.

...