使用循环创建 tkinter canvas 对象时修改它
Modifying a tkinter canvas object when creating it with a loop
我正在尝试根据随机修改的 24 位值更改一些 canvas 对象的颜色。
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")
调用此 class 时,我在 canvas 内创建了一个椭圆。我想要做的是能够分别访问这些椭圆中的每一个,以修改它们的颜色。有什么办法吗?我想用 (i) 整数标记它们,这是循环中的 (i),但我不确定这是否可行。另外,如果我想修改那些具有属于另一个 class 的函数的函数,我可以只使用标签来实现,还是我必须从 Person class?[=12 中调用一些东西? =]
谢谢。
当您在 canvas 上创建一个项目时,它 returns 一个唯一的 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, ...)
Also, if I want to modify those with a function that belongs to
another class, can I do so by just using the tags, or do I have to
call something from the Person class?
最好的办法是从 class 的人那里调用一些东西,IMO。原因是,程序的其他部分不应依赖于 Person class 的实现方式。
考虑一下您想要从椭圆形更改为矩形、图像或其他一些小部件的情况。通过使代码的其他部分调用对象上的方法,除了 Person class 之外,您不必修改任何代码。
如果程序的其余部分依赖于 Person 创建单个 canvas 对象这一事实,那么您就创建了紧密耦合。这意味着如果要更改单个 class 的实现,则必须更改大量代码。
我正在尝试根据随机修改的 24 位值更改一些 canvas 对象的颜色。
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")
调用此 class 时,我在 canvas 内创建了一个椭圆。我想要做的是能够分别访问这些椭圆中的每一个,以修改它们的颜色。有什么办法吗?我想用 (i) 整数标记它们,这是循环中的 (i),但我不确定这是否可行。另外,如果我想修改那些具有属于另一个 class 的函数的函数,我可以只使用标签来实现,还是我必须从 Person class?[=12 中调用一些东西? =]
谢谢。
当您在 canvas 上创建一个项目时,它 returns 一个唯一的 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, ...)
Also, if I want to modify those with a function that belongs to another class, can I do so by just using the tags, or do I have to call something from the Person class?
最好的办法是从 class 的人那里调用一些东西,IMO。原因是,程序的其他部分不应依赖于 Person class 的实现方式。
考虑一下您想要从椭圆形更改为矩形、图像或其他一些小部件的情况。通过使代码的其他部分调用对象上的方法,除了 Person class 之外,您不必修改任何代码。
如果程序的其余部分依赖于 Person 创建单个 canvas 对象这一事实,那么您就创建了紧密耦合。这意味着如果要更改单个 class 的实现,则必须更改大量代码。