Python Turtle 中的箭头命令
Arrow Commands in Python Turtle
我一直在尝试使用 canvas 功能将 turtle 放入 tkinter。我希望能够制作一个 turtle etcher sketcher 东西,这样我就可以用箭头键控制 turtle。我似乎无法让它工作,也不理解它吐出的错误:
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
一样,当您在 tkinter window 中使用 turtle embedded 时,您需要使用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()
在这种情况下不要使用 standalone turtle 的 Screen
,因为它可能会创建第二个 tkinter root window,导致稍后出现细微错误(比如图片未加载。)
我一直在尝试使用 canvas 功能将 turtle 放入 tkinter。我希望能够制作一个 turtle etcher sketcher 东西,这样我就可以用箭头键控制 turtle。我似乎无法让它工作,也不理解它吐出的错误:
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
一样,当您在 tkinter window 中使用 turtle embedded 时,您需要使用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()
在这种情况下不要使用 standalone turtle 的 Screen
,因为它可能会创建第二个 tkinter root window,导致稍后出现细微错误(比如图片未加载。)