如何在 python 中移动绿色字符以使用 onkey?
How to move green character for use onkey in 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()
每次左右移动时调用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 – 박준영
永远不会 运行 trinket.io 因为它缺少 Shape
class 和创建自定义海龟游标的能力。您需要编辑您的问题以明确提及此限制条件。
让我们用另一种方式来解决这个问题,类似于@tomasantunes,但我们将通过明智地使用 trinket.io 支持的 tracer()
方法来即时重绘:
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()
我想将这个绿色字符移动到左右键盘上。
但是下面的代码显示图片静止和移动是分开的。这是我的代码:
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()
每次左右移动时调用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 – 박준영
永远不会 运行 trinket.io 因为它缺少 Shape
class 和创建自定义海龟游标的能力。您需要编辑您的问题以明确提及此限制条件。
让我们用另一种方式来解决这个问题,类似于@tomasantunes,但我们将通过明智地使用 trinket.io 支持的 tracer()
方法来即时重绘:
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()