Как переместить зеленый символ для использования onkey в питоне? - PullRequest
1 голос
/ 24 мая 2019

Я хочу переместить этот зеленый символ для использования клавиатуры влево и вправо.

Однако приведенный ниже код показывает, что картинка неподвижна и движется отдельно. Вот мой код:

import turtle

A = turtle.Turtle()
A.speed(0)
A.hideturtle()
screen = turtle.Screen()

def MyGoto(A,x_xx,x_yy):
 A.penup()
 A.goto(x_xx,x_yy)
 A.pendown()

def DrawCircle(A,x_xx, x_yy, x_radius, x_color):
 MyGoto(A,x_xx,x_yy)
 A.color(x_color)
 A.fillcolor(x_color)
 A.begin_fill()
 A.circle(x_radius)
 A.end_fill()

global_xx = 10
def left():
 global global_xx
 turtle.backward(global_xx)

def right():
 global global_xx
 turtle.forward(global_xx)

def MySmile(A,global_xx,yy,wr):
 DrawCircle(A,global_xx+0*wr,yy-100*wr,150*wr,'green')
 DrawCircle(A,global_xx-40*wr,yy+60*wr,30*wr,'white')
 DrawCircle(A,global_xx-40*wr,yy+60*wr,10*wr,'black')
 DrawCircle(A,global_xx+50*wr,yy+60*wr,40*wr,'white')
 DrawCircle(A,global_xx+50*wr,yy+60*wr,10*wr,'black')
 DrawCircle(A,global_xx+0*wr,yy+20*wr,10*wr,'black')
 DrawCircle(A,global_xx+0*wr,yy-80*wr,40*wr,'brown')

MySmile(A,0,0,0.3)

screen.onkey(left, "Left") #this is keyboard code
screen.onkey(right, "Right")
screen.listen()

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Есть несколько способов сделать это, но я думаю, что наиболее удовлетворительным будет определение пользовательского курсора черепахи с использованием сложной формы.Затем мы изменяем форму черепахи на эту пользовательскую форму (наклоняем ее) и перемещаем ее по экрану, как любой другой курсор черепахи.

Это не работает в веб-сайте trinket.io TypeError: TypeError:() получил неожиданный аргумент ключевого слова 'visible' в строке 39 в main.py - 박준영

Это не будет когда-либо работать на trinket.io, так как отсутствует класс Shape и возможность создавать собственные курсоры черепах.Вам нужно отредактировать свой вопрос, чтобы явно упомянуть об этом ограничении.

Давайте пойдем об этом по-другому, аналогично @tomasantunes, но сделаем перерисовки мгновенно благодаря разумному использованию метода tracer(), который trinket.ioподдерживает:

from turtle import Screen, Turtle

global_xx = 0

def drawCircle(turtle, x, y, radius, color):
    turtle.goto(x, y)
    turtle.color(color)
    turtle.begin_fill()
    turtle.circle(radius)
    turtle.end_fill()

def mySmile(turtle, x, y, wr):

    turtle.clear()

    drawCircle(turtle, x + 0 * wr, y - 100 * wr, 150 * wr, 'green')
    drawCircle(turtle, x - 40 * wr, y + 60 * wr, 30 * wr, 'white')
    drawCircle(turtle, x - 40 * wr, y + 60 * wr, 10 * wr, 'black')
    drawCircle(turtle, x + 50 * wr, y + 60 * wr, 40 * wr, 'white')
    drawCircle(turtle, x + 50 * wr, y + 60 * wr, 10 * wr, 'black')
    drawCircle(turtle, x + 0 * wr, y + 20 * wr, 10 * wr, 'black')
    drawCircle(turtle, x + 0 * wr, y - 80 * wr, 40 * wr, 'brown')

def left():
    global global_xx

    screen.onkey(None, 'Left')  # disable handler inside handler

    global_xx -= 10
    mySmile(turtle, global_xx, 0, 0.3)

    screen.update()
    screen.onkey(left, 'Left')

def right():
    global global_xx

    screen.onkey(None, 'Right')

    global_xx += 10
    mySmile(turtle, global_xx, 0, 0.3)

    screen.update()
    screen.onkey(right, 'Right')

screen = Screen()

turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()

mySmile(turtle, global_xx, 0, 0.3)

screen.onkey(left, 'Left')
screen.onkey(right, 'Right')
screen.listen()

screen.tracer(0, 0)

screen.mainloop()
0 голосов
/ 24 мая 2019

Вызовите функцию рендеринга и очищайте экран при каждом перемещении влево и вправо.

global_xx = 0
def left():
 global global_xx
 global_xx -= 10
 A.clear()
 turtle.backward(10)
 MySmile(A, 0, 0.3)

def right():
 global global_xx
 global_xx += 10
 A.clear()
 turtle.forward(10)
 MySmile(A, 0, 0.3)


def MySmile(A,yy,wr):
 global global_xx
 DrawCircle(A,global_xx+0*wr,yy-100*wr,150*wr,'green')
 DrawCircle(A,global_xx-40*wr,yy+60*wr,30*wr,'white')
 DrawCircle(A,global_xx-40*wr,yy+60*wr,10*wr,'black')
 DrawCircle(A,global_xx+50*wr,yy+60*wr,40*wr,'white')
 DrawCircle(A,global_xx+50*wr,yy+60*wr,10*wr,'black')
 DrawCircle(A,global_xx+0*wr,yy+20*wr,10*wr,'black')
 DrawCircle(A,global_xx+0*wr,yy-80*wr,40*wr,'brown')
...