使用循环创建tkinter画布对象时,修改它

时间:2015-03-01 15:17:13

标签: python canvas tkinter tags

我正在尝试根据随机修改的24位值更改几个画布对象的颜色。

class Person:
def __init__(self, canvas, pts, i):
    canvas.create_oval(pts[i][0]+355, pts[i][1]+155,
                         pts[i][0]+355 + GUI.people_size_var.get(), pts[i][1] + 155 + GUI.people_size_var.get(),
                         fill="yellow", outline="black", width=2, tags="people")

调用此类时,我在画布中创建一个椭圆。我想要做的是能够分别访问这些椭圆中的每一个,以便修改它们的颜色。有没有办法做到这一点?我想过用(i)整数标记它们,这是(i)来自循环,但是我不确定这是否有用。另外,如果我想修改那些属于另一个类的函数,我可以通过使用标签来实现,还是必须从Person类调用一些东西?

谢谢。

1 个答案:

答案 0 :(得分:2)

在画布上创建项目时,它会返回唯一ID。您可以保存该ID并在以后引用它:

class Person:
    def __init__(self, canvas, pts, i):
        self.canvas = canvas
        self.oval_id = self.canvas.create_oval(...)

    def change_color(self):
        self.canvas.itemconfigure(self.oval_id, ...)
  

另外,如果我想修改那些属于的函数   另一个类,我可以通过使用标签来实现,或者我必须这样做   从Person类调用一些东西?

最好的事情是从Person类,IMO调用一些东西。原因是,程序的其他部分不应该依赖于Person类的实现方式。

考虑您想要从椭圆形变为矩形,或者更改为图像或其他小部件的情况。通过在代码上调用代码的其他部分方法,除了Person类之外,您不必修改任何代码。

如果程序的其余部分取决于Person创建单个画布对象的事实,那么您已经创建了紧耦合。这意味着如果要更改单个类的实现,则必须更改大量代码。