Python 有没有一种方法可以将循环生成列表中的对象成员与特定值关联起来?

Python 有没有一种方法可以将循环生成列表中的对象成员与特定值关联起来?,python,for-loop,while-loop,graphics,Python,For Loop,While Loop,Graphics,我正在尝试使用graphics.py制作可以用作按钮的简单图形。虽然我知道如何通过单独绘制每个对象并将其与字母或数字关联来实现这一点,但我正在使用循环来生成对象。我不知道如何将创建的每个对象与特定的字母或数字关联起来 下面是一些代码,我一直在努力寻找解决这个问题的方法。循环函数用于创建图形以及检测其中的鼠标点击。我迷路的地方是如何为列表中的每个成员分配一个字母或数字的特定分配。下面的代码生成了三个圆圈,我想分别与字母A、B、C关联,这样当单击时,它们会在图形上方绘制字母 from graphic

我正在尝试使用graphics.py制作可以用作按钮的简单图形。虽然我知道如何通过单独绘制每个对象并将其与字母或数字关联来实现这一点,但我正在使用循环来生成对象。我不知道如何将创建的每个对象与特定的字母或数字关联起来

下面是一些代码,我一直在努力寻找解决这个问题的方法。循环函数用于创建图形以及检测其中的鼠标点击。我迷路的地方是如何为列表中的每个成员分配一个字母或数字的特定分配。下面的代码生成了三个圆圈,我想分别与字母A、B、C关联,这样当单击时,它们会在图形上方绘制字母

from graphics import*
import string
def main():
    window = GraphWin("Window", 400, 400)
    circles1 = keys(window)
    # line here to call upon function that draws labels over
    # the circles using ascii string removed for relevance
    # test for clicking circles
    while True:
        clickPoint=window.checkMouse()
        if clickPoint != None:
            for i in circles1:
                if mouse(clickPoint, i) == True:
                    i.undraw()
                    # i.undraw used to test while loop


def keys(window):
    # Define circles as an empty list
    circles = []
    x = 50
    for i in range(3):
        x += 50
        circle = Circle(Point(0+x, 100), 20)
        circle.setFill("black")
        circles.append(circle)
        circle.draw(window)
    return circles



def mouse(point, circle):
   x = point.getX()
   y = point.getY()
   radius = circle.getRadius()
   center = circle.getCenter()
   cx = center.getX()
   cy = center.getY()
   distance=(((cx-x)**2)+((cy-y)**2))**0.5
   if (distance < radius):
       return True
    else:
        return False
从图形导入*
导入字符串
def main():
窗口=图形窗口(“窗口”,400400)
圆圈1=键(窗口)
#这里的行调用在其上绘制标签的函数
#使用ascii字符串的圆圈因相关性而被删除
#单击圆的测试
尽管如此:
clickPoint=window.checkMouse()
如果单击点!=无:
对于第1圈中的i:
如果鼠标(点击点,i)=真:
i、 undraw()
#i.undraw用于测试while循环
def键(窗口):
#将圆定义为空列表
圆圈=[]
x=50
对于范围(3)中的i:
x+=50
圆=圆(点(0+x100),20)
圆圈。设置填充(“黑色”)
圆。追加(圆)
画圆(窗口)
返回圈
def鼠标(点、圆):
x=point.getX()
y=点。getY()
半径=圆。getRadius()
center=circle.getCenter()
cx=center.getX()
cy=center.getY()
距离=((cx-x)**2)+((cy-y)**2))**0.5
如果(距离<半径):
返回真值
其他:
返回错误

理想情况下,点击一个按钮会在上面画出指定给它的字母。感谢您的帮助

您可以输入
string.ascii\u小写字母
现在,返回一个数组,但使用
generator

从图形导入*
导入字符串
def键(窗口):
对于字母,枚举中的索引(string.ascii_小写):
x=50*(指数+1)
圆=圆(点(0+x100),20)
圆圈。设置填充(“黑色”)
#用这封信做你需要的事
画圆(窗口)
屈服圈
如果此代码令人困惑,我建议您记录以下内容:

  • 生成器和
    yield
    关键字(某些资源)
  • 枚举
    函数(您可以检查)

记住这两件事,现在只需要
string.ascii_lowercase
将返回
abcdefghijklmnopqrstuvwxyz
。我让你猜一下
string.ascii_大写
返回的是什么

我理解这背后的思想过程,但我在“for letter,index in string.ascii_lowercase:”行中得到了一个值错误:“ValueError:没有足够的值来解包(预期为2,得到1)”忘记了for循环上的
枚举
。。。。答复已编辑