2 回答

TA贡献2080条经验 获得超4个赞
你必须使用
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()

TA贡献1856条经验 获得超5个赞
就像你使用RawTurtleinstead of一样Turtle,当你使用嵌入在 tkinter 窗口中的 turtle 时,如果你想要它提供的方法,你需要使用TurtleScreeninstead of :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 根窗口,从而导致稍后出现细微的错误(例如图像未加载。)
添加回答
举报