Ваша программа является результатом «магического мышления» и не может работать.Например: вы используете автономную черепаху, когда вы должны использовать встроенную черепаху;вы вызываете root.mainloop()
, чтобы передать управление циклу событий Tk в середине кода инициализации;import os
не имеет здесь никакого дела;Вы создаете два корня Tk !;вы запускаете гонку до того, как у пользователя появится возможность выбрать черепаху;Вы жестко закодировали три черепахи везде, хотя ваш трек предназначен для большего.
Ниже приведена полная доработка вашего кода для его запуска:
from turtle import RawTurtle, TurtleScreen, ScrolledCanvas
from random import randint
from tkinter import *
COLORS = ['red', 'green', 'blue', 'magenta']
def run_race():
selected = COLORS[radio_var.get()]
label.configure(text="Your choice: " + selected)
winner = None
while True:
for racer in racers:
if racer.xcor() >= 300:
winner = racer
break
racer.forward(randint(1, 8))
else: # no break
continue
break
window = Toplevel(root)
window.title('Guess Result')
window.geometry('200x60')
correct = Label(window, text="Correct!")
failure = Label(window, text="Fail!")
if winner.pencolor() == selected:
correct.pack()
else:
failure.pack()
root = Tk()
root.title("Turtle OTB")
root.geometry('700x700')
Label(root, text="Which turtle do you think will win?").pack()
radio_var = IntVar()
for index, color in enumerate(COLORS):
Radiobutton(root, text=color, variable=radio_var, value=index).pack()
Button(root, text="Start Race", command=run_race, width=10, height=1).pack()
label = Label(root, text="Your choice: ")
label.pack()
canvas = ScrolledCanvas(root)
canvas.pack(fill=BOTH, expand=True)
screen = TurtleScreen(canvas)
screen.tracer(False)
t = RawTurtle(screen)
t.penup()
t.goto(-300, 250)
for step in range(0, 11):
t.write(step, align='center')
t.right(90)
t.forward(10)
t.pendown()
for line in range(8):
t.forward(30)
t.penup()
t.forward(30)
t.pendown()
t.penup()
t.backward(490)
t.left(90)
t.forward(60)
racers = []
for gate, color in enumerate(COLORS):
racer = RawTurtle(screen, 'turtle')
racer.speed('fastest')
racer.color(color)
racer.penup()
racer.goto(-300, 195 - gate * 60)
racer.pendown()
racers.append(racer)
screen.tracer(True)
screen.mainloop()
Однако он все еще нуждается в работе.(Например, возможность запуска новой гонки без перезапуска программы.)
![enter image description here](https://i.stack.imgur.com/EffFY.png)