在Python中创建唯一标识符

时间:2018-01-06 12:56:20

标签: python unique

我制作了一个带有十个椭圆形的简单程序。我稍后会和他们一起工作,我需要移动椭圆,所以我需要每个椭圆的唯一名称。但是,有很多椭圆形,所以我不想在新的代码行上制作每个椭圆形。我使用了循环,但后来我无法为它们创建唯一的名称。例如:

  • self.oval_id1 = self.canvas.create_oval(40,40,60,60)

  • self.oval_id2 = self.canvas.create_oval(60,40,80,60)... etc

有没有办法在循环中制作这样的名字?

import tkinter
class Main:
    def __init__(self):
        self.canvas = tkinter.Canvas(width=500, height=300)
        self.canvas.pack()
        x, y = 50, 50
        for i in range(10):
            self.canvas.create_oval(x-10,y-10,x+10,y+10)
            x += 30
main = Main()

2 个答案:

答案 0 :(得分:2)

即使技巧可以让你实现这一点,你也不希望如此。你需要它可迭代,首先使用一个可迭代的容器,这里是一个列表。

class Main:
    def __init__(self):
        self.canvas = tkinter.Canvas(width=500, height=300)
        self.canvas.pack()
        self.oval_id = []
        x, y = 50, 50
        for i in range(10):
            self.oval_id.append(self.canvas.create_oval(x-10,y-10,x+10,y+10))
            x += 30

您现在可以使用self.oval_id[i]访问第i个椭圆

答案 1 :(得分:0)

您可能需要setattr

所以,比如:

class Main:
    def __init__(self):
        self.canvas = tkinter.Canvas(width=500, height=300)
        self.canvas.pack()
        x, y = 50, 50
        for i in range(10):
            oval = self.canvas.create_oval(x-10,y-10,x+10,y+10)
            setattr(self, 'oval_%d' % i, oval)
            x += 30
相关问题