我使用tkinter,但我的问题可能很普遍。
这是我第一次设计GUI。我的每个对象都被建模为一个类。我不明白如何将GUI类层次结构与类层次结构的其余部分联系起来。
例如,我有生物:
# this is before I had any GUI in my code
class Creature:
def current_position() # returns real-time x, y coords
# ...
我想将它们显示为在画布上移动的圆圈。我认为运动的图形表示应该由update_display
中的方法class Creature
提供,这似乎是合理的。但是,这意味着class Creature
必须知道有关GUI的详细信息。此外,使用class App(tkinter.Tk)
方法的redraw
需要知道所有现有Creature
个实例的列表才能调用其update_display
方法。这太依赖了。
什么是正确的方法?
答案 0 :(得分:4)
普遍接受的模式称为模型/视图/控制器。你有一个控制器对象,它既知道所有的生物(你的“模型”)和GUI(你的“视图”)。然后控制器负责连接两者。例如,您的视图可能有一个“draw_creature”方法,该方法接受一个生物作为输入。然后控制器将迭代生物,然后一个接一个地传递给视图。或者,每个生物都有一个“绘制”方法,该方法接受视图作为参数,并且视图要求每个生物绘制自己,并向其传递对视图的引用。
使用此模式,您可以轻松拥有多个视图,但不必更新生物以了解它们。同样,您可以更改存储和管理生物的方式,并且视图不需要知道任何相关信息。