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