繁体   English   中英

Python Turtle 中的箭头命令

[英]Arrow Commands in Python Turtle

我一直在尝试使用画布功能将海龟放入 tkinter。 我希望能够制作一个海龟蚀刻草图,以便我可以用箭头键控制海龟。 我似乎无法让它工作,也不明白它吐出的错误:

NameError: name 'Screen' is not defined

这是我的代码:

import tkinter as tk
import turtle

window = tk.Tk()
window.geometry("750x500")
window.resizable(0,0)

app = tk.Canvas(master = window,
                width = 500,
                height = 500,
                bg = "white")
app.pack()
Screen()
turtle = turtle.RawTurtle(app)
turtle = turtle.Screen()

def k1():
    move.forward(1)

def k2():
    move.left(1)

def k3():
    move.right(1)

def k4():
    move.back(1)

turtle.onkey(k1, "Up")
turtle.onkey(k2, "Left")
turtle.onkey(k3, "Right")
turtle.onkey(k4, "Down")

turtle.listen()
window.mainloop()

你必须使用

turtle.Screen()

代替

Screen()

但我发现代码存在其他问题。 当按下键时,我会使用tkinter方法bind()来执行函数。

import tkinter as tk
import turtle

# --- functions ---

def k1(event):
    t.forward(1)

def k2(event):
    t.left(1)

def k3(event):
    t.right(1)

def k4(event):
    t.back(1)

# --- main ---

window = tk.Tk()

window.geometry("750x500")
window.resizable(False, False)

canvas = tk.Canvas(master=window, width=500, height=500, bg="white")
canvas.pack()

t = turtle.RawTurtle(canvas)

window.bind("<Up>", k1)
window.bind("<Left>", k2)
window.bind("<Right>", k3)
window.bind("<Down>", k4)

window.mainloop()

就像您使用RawTurtle而不是Turtle ,当您使用嵌入TurtleScreen窗口中的Turtle时,如果您想要它提供的方法,则需要使用TurtleScreen而不是Screen

import tkinter as tk
from turtle import TurtleScreen, RawTurtle

window = tk.Tk()
window.geometry("750x500")
window.resizable(0, 0)

canvas = tk.Canvas(master=window, width=500, height=500)
canvas.pack()

screen = TurtleScreen(canvas)
turtle = RawTurtle(screen)

def k1():
    turtle.forward(1)

def k2():
    turtle.left(1)

def k3():
    turtle.right(1)

def k4():
    turtle.back(1)

screen.onkey(k1, "Up")
screen.onkey(k2, "Left")
screen.onkey(k3, "Right")
screen.onkey(k4, "Down")

screen.listen()
screen.mainloop()

在这种情况下不要使用独立的海龟Screen ,因为它可能会创建第二个 tkinter 根窗口,稍后会导致细微的错误(如图像未加载。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM