如何移动绿色字符以便在python中使用onkey?

2024-04-24 08:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把这个绿色字符移到键盘左右。你知道吗

但是,下面的代码显示图片是静止的,并且单独移动。这是我的密码:

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


Tags: rightdefwrleftfillscreenglobalcolor
2条回答

调用render函数并在每次左右移动时清除屏幕。你知道吗

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')

有两种方法可以做到这一点,但我认为最令人满意的将是定义一个自定义海龟光标使用复合形状。然后我们将海龟的形状更改为自定义形状(倾斜它),并像其他海龟光标一样在屏幕上移动它。你知道吗

This is not working in trinket.io website TypeError : TypeError: () got an unexpected keyword argument 'visible' on line 39 in main.py – 박준영

这不会在上运行韦小宝.io因为它缺少Shape类和创建自定义海龟游标的能力。您需要编辑您的问题以明确地提及此约束。你知道吗

让我们用另一种方法来处理这个问题,类似于@tomasantunes,但是我们将通过明智地使用tracer()方法使重绘立即生效韦小宝.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()

相关问题 更多 >