python)我想获取调查并打印结果

时间:2019-05-09 10:16:30

标签: python turtle-graphics

  1. 我想对谁将在比赛前获胜进行调查。
  2. 弹出框不会关闭,下一个代码也不会运行。
  3. 结果窗口甚至无法工作。
import turtle as t
import random
from tkinter import *
from tkinter import messagebox
import os

root = Tk() 
root.title("choice")
root.geometry("300x170")
root.resizable(0,0)

window = Tk() 
window.title("result")
window.geometry("300x170")
window.resizable(0,0)

def quit():
    global root
    root.exit()

t.speed(10)
t.penup()
t.goto(-300,250)

for step in range(10):
    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.penup()
    t.left(90)
    t.forward(20)

tu1=t.Turtle()
tu1.color('red')
tu1.shape('turtle')
tu1.penup()
tu1.goto(-300,190)
tu1.pendown()

tu2=t.Turtle()
tu2.color('blue')
tu2.shape('turtle')
tu2.penup()
tu2.goto(-300,130)
tu2.pendown()

tu3=t.Turtle()
tu3.color('green')
tu3.shape('turtle')
tu3.penup()
tu3.goto(-300,70)
tu3.pendown()

def your_choice():
    yn = 'not selected'

    if Radiovar.get() == 1:
        yn = "no.1 is selected"
    elif Radiovar.get() == 2:
        yn = "no.2 is selected"
    elif Radiovar.get() == 3:
        yn = "no.3 is selected" 

    lbl2.configure(text="your choice: "+yn)
    messagebox.showinfo("your choice",yn)

lbl = Label(root, text="""Which turtle do you think will win?""", font="NanumGothic 10")
lbl.pack()

yn = StringVar()

Radiovar = IntVar()

Radio_button1 = Radiobutton(text="no.1",variable=Radiovar,value=1)
Radio_button2 = Radiobutton(text="no.2",variable=Radiovar,value=2)
Radio_button3 = Radiobutton(text="no.3",variable=Radiovar,value=3)

btn = Button(root, text="choice",command=your_choice,width=5,height=1)

lbl2 = Label(root,text="your choice : ")

Radio_button1.pack()
Radio_button2.pack()
Radio_button3.pack()

btn.pack()
lbl2.pack()

root.mainloop()
root.quit() 

for go in range(70):
    sp1=tu1.forward(random.randint(1,8))
    sp2=tu2.forward(random.randint(1,8))
    sp3=tu3.forward(random.randint(1,8))

corLab1 = Label(window, text="Correct");
faiLab1 = Label(window, text="fail");

if Radiovar==1:
    if sp1>sp2 and sp1>sp3 :
        corLab1.pack();
    else:
        faiLab1.pack();
elif Radiovar==2:
    if sp2>sp1 and sp2>sp3 :
        corLab1.pack();
    else:
        faiLab1.pack();
else:
    if sp3>sp1 and sp3>sp2 :
        corLab1.pack();
    else:
        faiLab1.pack();

1 个答案:

答案 0 :(得分:0)

您的程序是“魔术思维”的结果,不可能起作用。例如:您应该使用独立乌龟,而应该使用嵌入式乌龟;您调用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