我正在尝试使用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
理想情况下,单击按钮会在其上方绘制分配给它的字母。谢谢您的帮助
答案 0 :(得分:0)
您可以遍历string.ascii_lowercase
现在,您返回一个数组,但是使用generator
from graphics import*
import string
def keys(window):
for letter, index in enumerate(string.ascii_lowercase):
x = 50*(index+1)
circle=Circle(Point(0+x,100),20)
circle.setFill("black")
# Do what you need with Letter
circle.draw(window)
yield circle
如果此代码令人困惑,建议您记录以下内容:
请牢记这两点,您现在只需要string.ascii_lowercase
将返回abcdefghijklmnopqrstuvwxyz
。我会让你猜猜string.ascii_uppercase
返回了什么