Python Turtle 标题和按钮调试帮助请求

问题描述 投票:0回答:1

我一直在做一个项目,我正在构建一个类似于 Kahoot! 的测验,其中包含有关芝加哥的问题。我遇到了一个障碍:测验运行时,答案选项的标题不可见。它们仅在单击应答按钮时出现一小会儿,然后再次消失。我希望这些标题持续可见,以便用户可以看到它们。我对编码相当陌生,并且已经在这方面停留了几个小时。谁能帮我弄清楚如何保持答案选项可见?

from turtle import Screen, Turtle

# Define the quiz questions, options, and answers
quiz_questions = [
    {
        "question": "Which type of crime is most committed in Chicago?",
        "options": ["A. Burglary", "B. Theft", "C. Assault", "D. Vandalism"],
        "answer": "B"
    },
    {
        "question": "What is considered the most popular sport in Chicago according to recent surveys?",
        "options": ["A. Football", "B. Basketball", "C. Baseball", "D. Hockey"],
        "answer": "C"
    },
    {
        "question": "According to public opinion surveys, which public park in Chicago is the most visited?",
        "options": ["A. Lincoln Park", "B. Grant Park", "C. Public Transit", "D. Millenium Park"],
        "answer": "D"
    },
    {
        "question": "What mode of transportation do most Chicagoans prefer for commuting, based on city transportation surveys?",
        "options": ["A. Car", "B. Bicycle", "C. Public Transit", "D. Walking"],
        "answer": "C"
    },
    {
        "question": "Which neighborhood is commonly perceived as the culinary hotspot of Chicago, as per local food surveys?",
        "options": ["A. West Loop", "B. River North", "C. Noise Pollution", "D. Waste Management"],
        "answer": "A"
    },
    {
        "question": "Based on environmental surveys, what is Chicago's biggest environmental concern?",
        "options": ["A. Water Pollution", "B. Air Pollution", "C. Wicker Park", "D. Lincoln Square"],
        "answer": "B"
    },
    {
        "question": "What is the most attended annual event in Chicago, according to event attendance records?",
        "options": ["A. Chicago Marathon", "B. The Taste of Chicago", "C. Lollapalooza", "D. Chicago Auto Show"],
        "answer": "B"
    },
    {
        "question": "Which Chicago museum is rated the highest in visitor satisfaction surveys?",
        "options": ["A. Museum of Science and Industry", "B. Field Museum", "C. The Art Institute of Chicago", "D. Chicago History Museum"],
        "answer": "C"
    },
    {
        "question": "What is the most commonly spoken language in Chicago after English, according to demographic surveys?",
        "options": ["A. Hindi", "B. Chinese", "C. Spanish", "D. Vietnamese"],
        "answer": "C"
    },
    {
        "question": f"Based on urban development surveys, what is Chicago's most \nrapidly growing neighborhood in terms of new construction and business openings?",
        "options": ["A. Lincoln Park", "B. Fulton Market", "C. Hyde Park", "D. Logan Square"],
        "answer": "B"
    }
]

# Initialize the screen
screen = Screen()
screen.setup(width=1.0, height=1.0)
screen.bgcolor('white')

# Create turtles for the question, options, score, and timer
question_turtle = Turtle()
question_turtle.hideturtle()
question_turtle.penup()
question_turtle.goto(0, 250)
question_turtle.color('black')

option_turtles = []
option_texts = []  # List to hold the text turtles
option_colors = ['red', 'yellow', 'blue', 'green']
for i in range(4):
    option_turtle = Turtle(shape='square')
    option_turtle.penup()
    option_turtle.shapesize(stretch_wid=5, stretch_len=20)  # Larger buttons
    option_turtle.color(option_colors[i])
    option_turtle.goto(0, 150 - i * 120)  # Adjust the position
    
    # Create a turtle for the option text
    text_turtle = Turtle()
    text_turtle.hideturtle()
    text_turtle.penup()
    text_turtle.goto(option_turtle.xcor(), option_turtle.ycor() - 20)
    text_turtle.color('white')  # White text color
    
    option_turtles.append(option_turtle)
    option_texts.append(text_turtle)  # Add to the list of text turtles

score_turtle = Turtle()
score_turtle.hideturtle()
score_turtle.penup()
score_turtle.goto(200, 330)
score_turtle.color('black')

timer_turtle = Turtle()
timer_turtle.hideturtle()
timer_turtle.penup()
timer_turtle.goto(-200, 330)
timer_turtle.color('purple')

# Draw timer circle
timer_circle = Turtle()
timer_circle.hideturtle()
timer_circle.penup()
timer_circle.color('purple')
timer_circle.goto(-200, 220)
timer_circle.shape('circle')
timer_circle.shapesize(stretch_wid=3, stretch_len=3)  # Adjust size as needed

def draw_question(question_number, question, options):
    question_turtle.clear()
    for i, option_turtle in enumerate(option_turtles):
        option_turtle.showturtle()

        # Clear the old text and write the new one
        option_texts[i].clear()
        option_texts[i].write(options[i], align="center", font=("Arial", 16, "bold"))

    question_turtle.write(f"Question {question_number}: {question}", align="center", font=("Arial", 18, "normal"))

def show_score(score):
    score_turtle.clear()
    score_turtle.write(f"Score: {score}/10", align="center", font=("Arial", 18, "normal"))

def show_timer(time_left):
    timer_turtle.clear()
    timer_turtle.write(f"Time: {time_left}s", align="center", font=("Arial", 18, "normal"))

def handle_option_click(x, y, answer, correct_answer, callback):
    if answer == correct_answer:
        score[0] += 1  # Increment score if answer is correct
    show_score(score[0])
    callback()  # Call the callback function to proceed to the next question
    # Redraw text immediately after handling click
    draw_current_options()

def draw_current_options():
    for i in range(4):
        option_texts[i].clear()
        if current_question_index[0] < len(quiz_questions):  # Ensure index is within bounds
            option_texts[i].write(quiz_questions[current_question_index[0]]['options'][i], align="center", font=("Arial", 16, "bold"))

def setup_question(question_info):
    current_question_index[0] += 1  # Increment question index
    draw_question(current_question_index[0], question_info['question'], question_info['options'])
    correct_answer = question_info['answer']
    for i, option_turtle in enumerate(option_turtles):
        option_turtle.onclick(lambda x, y, a=chr(65+i), ca=correct_answer: handle_option_click(x, y, a, ca, next_question))

def next_question():
    if quiz_questions and current_question_index[0] < len(quiz_questions):
        question_info = quiz_questions[current_question_index[0]]
        setup_question(question_info)
    else:
        finish_quiz()

def update_timer():
    if time_elapsed[0] < 100:
        time_elapsed[0] += 1
        show_timer(100 - time_elapsed[0])
        screen.ontimer(update_timer, 1000)
    else:
        finish_quiz()

def finish_quiz():
    question_turtle.goto(0, 0)
    question_turtle.write("Quiz Over! Final Score: {}/10".format(score[0]), align="center", font=("Arial", 24, "bold"))
    for option_turtle in option_turtles:
        option_turtle.hideturtle()

score = [0]
time_elapsed = [0]  # Timer counter
current_question_index = [0]  # Track current question number

# Show initial score
show_score(score[0])  # Initialize score display
show_timer(100 - time_elapsed[0])

if quiz_questions:
    next_question()  # Start the quiz
    update_timer()  # Start the timer

screen.mainloop()

我一直在尝试使用chatgpt解决这个问题,但没有成功

python turtle-graphics python-turtle
1个回答
0
投票
def setup_question(question_info):
    correct_answer = question_info['answer']
    for i, option_turtle in enumerate(option_turtles):
        option_turtle.onclick(lambda x, y, a=chr(65+i), ca=correct_answer: handle_option_click(x, y, a, ca, next_question))
    current_question_index[0] += 1  # Increment question index
    draw_question(current_question_index[0], question_info['question'], question_info['options'])

© www.soinside.com 2019 - 2024. All rights reserved.