如何在turtle onclick函数中为列表赋值

时间:2017-11-07 22:58:22

标签: python global-variables turtle-graphics

在我使用python的第一个(有趣的)项目中,我正在努力解决这个问题:我有四只乌龟在点击周期中通过一组颜色状态。我需要找到一种方法将每只乌龟的最后颜色状态反馈给我的程序。颜色将用作用户输入。 所以我为每个onclick设置了一个列表,海龟和一个单独的函数,就像这样(缩短的例子):

GET /asset

单击时颜色发生了变化,但是u_choice没有更新。那么我在这里做错了什么?

2 个答案:

答案 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()