这是我的“州名游戏”代码,一切似乎都运行良好,但是当我输入州名时,图像消失,并且该州名的名称写在屏幕上,但没有图像。所以,基本上我想在输入州名后保留该名称。非常感谢。
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)
您的实施最终会遇到两个问题。
用户输入州名称后,图像消失,因为您调用
turtle.hideturtle()
,它隐藏了地图,并且永远不会用 turtle.showturtle()
跟随它
但是,即使您确实拨打了
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)