Команды стрелок в Python Черепаха - PullRequest
0 голосов
/ 28 января 2020

Я пытался поместить черепаху в tkinter, используя функцию canvas. Я хочу быть в состоянии сделать эскиз к черепахе, чтобы я мог управлять черепахой с помощью клавиш со стрелками. Кажется, я не могу заставить его работать и не понимаю, какую ошибку он выдает:

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()

Ответы [ 2 ]

1 голос
/ 28 января 2020

Так же, как вы использовали RawTurtle вместо Turtle, когда вы используете черепаху внедренную в окне tkinter, вам нужно использовать 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()

Не используйте автономный turtle's Screen в этой ситуации, поскольку он потенциально может создать второе окно tkinter root, что позже приведет к незначительным ошибкам ( как изображения не загружаются.)

1 голос
/ 28 января 2020

Вы должны использовать

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()
...