为什么我的程序在我身上出现问题?

时间:2016-07-17 00:55:41

标签: python turtle-graphics

我正在使用python中的绘图应用程序,最近我添加了一个mousedrag函数来制作它,以便你可以拖动它并绘制它。它经常会有点滞后,当我拖动它时可以朝其他方向走。这是代码:

    import sys
import turtle
from tkinter import *


wn = turtle.Screen()
wn.title('Drawing Function!')
wn.bgcolor('blue')
ashton = turtle.Turtle()
ashton.pencolor('lime')
ashton.shape('turtle')




def turtleWrite():
    pass

def turtleForward():
    ashton.forward(30)

def turtleLeft():
    ashton.left(45)

def turtleRight():
    ashton.right(45)

def closeWindow():
    wn.bye()


def penup():
    ashton.penup()

def pendown():
    ashton.pendown()

def clear():
    ashton.clear()

def stamp():
    ashton.stamp()

def undo():
    ashton.undo()

ashton.ondrag(ashton.goto)

wn.onkey(turtleForward, 'Up')
wn.onkey(turtleLeft, 'Left')
wn.onkey(turtleRight, 'Right')
wn.onkey(closeWindow, 'q')
wn.onkey(penup, 'u')
wn.onkey(pendown, 'd')
wn.onkey(clear, 'c')
wn.onkey(stamp, 's')
wn.onkey(undo, 'BackSpace')




wn.listen()
wn.mainloop()

有没有人知道为什么会发生这种情况,如果有的话,我该如何修复它们?

谢谢!

1 个答案:

答案 0 :(得分:2)

当建议turtle.ondrag(turtle.goto)手绘时,龟文档有点过于简单了。要使其工作,您需要定义自己的事件处理程序,在处理时立即禁用拖动事件,移动乌龟,然后在退出时重新启用拖动事件:

import turtle

wn = turtle.Screen()
wn.title('Drawing Function!')
wn.bgcolor('blue')

ashton = turtle.Turtle()
ashton.pencolor('green')
ashton.shape('turtle')

def drag_handler(x, y):
    ashton.ondrag(None)  # disable event inside event handler
    ashton.goto(x, y)
    ashton.ondrag(drag_handler)  # reenable event on event handler exit

ashton.ondrag(drag_handler)

wn.onkey(lambda: ashton.forward(30), 'Up')
wn.onkey(lambda: ashton.left(45), 'Left')
wn.onkey(lambda: ashton.right(45), 'Right')
wn.onkey(lambda: wn.bye(), 'q')
wn.onkey(lambda: ashton.penup(), 'u')
wn.onkey(lambda: ashton.pendown(), 'd')
wn.onkey(lambda: ashton.clear(), 'c')
wn.onkey(lambda: ashton.stamp(), 's')
wn.onkey(lambda: ashton.undo(), 'BackSpace')

wn.listen()
wn.mainloop()

我的系统被笔颜色和石灰炸掉了#39; (" TurtleGraphics错误:颜色不好的字符串:石灰")所以我不得不替换绿色'对于这个例子。

enter image description here