在我使用python的第一个(有趣的)项目中,我正在努力解决这个问题:我有四只乌龟在点击周期中通过一组颜色状态。我需要找到一种方法将每只乌龟的最后颜色状态反馈给我的程序。颜色将用作用户输入。 所以我为每个onclick设置了一个列表,海龟和一个单独的函数,就像这样(缩短的例子):
GET /asset
单击时颜色发生了变化,但是u_choice没有更新。那么我在这里做错了什么?
答案 0 :(得分:0)
当我运行时:
import turtle
u_choice = ['blfsd']
def color_change_one(x, y):
global u_choice
if t_one.color() == ('grey', 'grey'):
t_one.color('red')
u_choice[0] = 'red'
elif t_one.color() == ('red', 'red'):
t_one.color('blue')
u_choice[0] = 'blue'
print u_choice
t_one = turtle.Turtle()
t_one.shape('circle')
t_one.color('grey')
t_one.onclick(color_change_one)
turtle.mainloop()
每次点击后我都会看到u_choice更新。如果你在点击乌龟之前检查u_choice的值,那么它还没有更新u_choice是有道理的。
答案 1 :(得分:0)
您不需要global u_choice
语句,因为您没有更改u_choice
的值,只是其中一个元素。此外,仅测试.pencolor()
更简单,因为.color()
更新笔和填充颜色。
尝试重新编写代码。它使用计时器作为u_choice
变量的独立打印机。当您将乌龟通过它的三种颜色循环时,您应该在控制台上看到更改:
from turtle import Turtle, Screen
u_choice = ['a', 'b', 'c', 'd']
def color_change_one(x, y):
if t_one.pencolor() == 'grey':
t_one.color('red')
elif t_one.pencolor() == 'red':
t_one.color('blue')
elif t_one.pencolor() == 'blue':
t_one.color('grey')
u_choice[0] = t_one.pencolor()
screen = Screen()
t_one = Turtle('circle')
t_one.color('grey')
u_choice[0] = t_one.pencolor()
t_one.onclick(color_change_one)
def display():
print(u_choice)
screen.ontimer(display, 1000)
display()
screen.mainloop()