为什么每当我输入名称并点击时图像就会消失?

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

这是我的“州名游戏”代码,一切似乎都运行良好,但是当我输入州名时,图像消失,并且该州名的名称写在屏幕上,但没有图像。所以,基本上我想在输入州名后保留该名称。非常感谢。

import pandas
from turtle import Turtle, Screen

turtle = Turtle()
screen = Screen()

# add image onto the screen
screen.title("U.S. States Game")
image = "blank_states_img.gif"
screen.addshape(image)
turtle.shape(image)

# create state name list
data = pandas.read_csv("50_states.csv")
all_names = data.state.to_list()
name_list = []

# write the name of the State onto the screen
while len(name_list) < 50:
    guess_name = screen.textinput(title=f"{len(name_list)}/50 States Correct",
                                  prompt="Input the name of a state ").title()
    if guess_name == "Exit":
        missing_states = []
        for state in all_names:
            if state not in name_list:
                missing_states.append(state)
        df = pandas.DataFrame(missing_states)
        df.to_csv("missing_states.csv")
        break

    if guess_name in all_names:
        name_list.append(guess_name)
        turtle.hideturtle()
        turtle.penup()
        row_data = data[data.state == guess_name]
        turtle.goto(int(row_data.x), int(row_data.y))
        turtle.write(guess_name)
python turtle-graphics python-turtle
1个回答
0
投票

您的实施最终会遇到两个问题。

  1. 用户输入州名称后,图像消失,因为您调用

    turtle.hideturtle()
    ,它隐藏了地图,并且永远不会用
    turtle.showturtle()

    跟随它
  2. 但是,即使您确实拨打了

    turtle.showTurtle
    ,您也会看到地图在窗口内移动,因为您还拨打了
    turtle.goto()
    来移动笔以写入州名称。

解决方案是使用两个 Turtle 对象 - 一个用于地图图像,第二个用于填写州名称。在这个例子中,我分别将它们命名为

map
labels

import pandas
from turtle import Turtle, Screen

map = Turtle()
screen = Screen()
# create second Turtle to handle writing the labels - hidden by default
labels = Turtle(visible=False)
labels.penup()


# add image onto the screen
screen.title("U.S. States Game")
image = "blank_states_img.gif"
screen.addshape(image)
map.shape(image)

# create state name list
data = pandas.read_csv("50_states.csv")
all_names = data.state.to_list()
name_list = []

# write the name of the State onto the screen
while len(name_list) < 50:
    guess_name = screen.textinput(title=f"{len(name_list)}/50 States Correct",
                                  prompt="Input the name of a state ").title()
    if guess_name == "Exit":
        missing_states = []
        for state in all_names:
            if state not in name_list:
                missing_states.append(state)
        df = pandas.DataFrame(missing_states)
        df.to_csv("missing_states.csv")
        break

    if guess_name in all_names:
        name_list.append(guess_name)
        row_data = data[data.state == guess_name]
        labels.goto(int(row_data.x), int(row_data.y))
        labels.write(guess_name)
© www.soinside.com 2019 - 2024. All rights reserved.