移动已经绘制的图像python龟

时间:2016-11-16 01:25:31

标签: python turtle-graphics

是否可以直观地移动已经绘制的图像? 每次移动时都不必重绘它? 因此,显示方形完整并向某个方向移动。

from turtle import * 
def drawing():
    forward(50)
    left(90)
    forward(50)
    left(90)
    forward(50)
    left(90)
    forward(50)
drawing()
done()

2 个答案:

答案 0 :(得分:1)

turtle没有特殊功能来移动所有元素。

turtle使用tkinter使用Canvas对象来显示元素 Canvas具有获取所有显示元素并移动它们的功能。

turtle可以访问画布(get_canvas()),但稍后您必须知道tkinter对画布和元素执行某些操作。

此示例绘制元素,然后按(300, 50)移动 您也可以单击乌龟并拖动它以移动所有元素。

import turtle

t = turtle.Turtle()

# --- move all elements ---

def move(offset_x, offset_y):

    canvas = turtle.getcanvas() # `turtle`, not `t`
    for element_id in canvas.find_all():
        canvas.move(element_id, offset_x, offset_y)

# --- move all on draging turtle ---

old_x = 0
old_y = 0

# get mouse current position
def on_click(x, y):
    global old_x, old_y

    old_x = x
    old_y = y

# move elements
def on_drag(x, y):
    global old_x, old_y

    move(x-old_x, old_y-y)

    old_x = x
    old_y = y

t.onclick(on_click)
t.ondrag(on_drag)

# --- example ---

# draw something 

for a in range(8):
    for _ in range(8):
        t.left(45)
        t.fd(20)
    t.right(45)
    t.up()
    t.fd(60)
    t.down()

# move

move(300, 50)

# ---

turtle.done() # `turtle`, not `t`

答案 1 :(得分:0)

如果您需要移动的只是一组简单的填充多边形,您可以使用Turtle移动它而不会下降到tkinter级别(尽管您可以通过使用非白色填充颜色来模拟未填充的多边形 - 白色钢笔颜色。)您可以创建一个自定义龟形状,并将乌龟移动到屏幕周围:

from turtle import Turtle, Screen, Shape

screen = Screen()

turtle = Turtle(visible=False)
turtle.speed("fastest")
turtle.penup()

shape = Shape("compound")

for octogon in range(8):
    turtle.begin_poly()
    for _ in range(8):
        turtle.left(45)
        turtle.fd(20)
    turtle.end_poly()
    shape.addcomponent(turtle.get_poly(), "blue", "red")

    turtle.right(45)
    turtle.fd(60)

screen.register_shape("octogons", shape)

octopus = Turtle(shape="octogons")
octopus.penup()
octopus.speed("slowest")

octopus.goto(300, 200)
octopus.goto(-200, 200)

screen.exitonclick()