gui设计问题

时间:2011-01-25 09:34:13

标签: python design-patterns user-interface tkinter

我使用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方法。这太依赖了。

什么是正确的方法?

1 个答案:

答案 0 :(得分:4)

普遍接受的模式称为模型/视图/控制器。你有一个控制器对象,它既知道所有的生物(你的“模型”)和GUI(你的“视图”)。然后控制器负责连接两者。例如,您的视图可能有一个“draw_creature”方法,该方法接受一个生物作为输入。然后控制器将迭代生物,然后一个接一个地传递给视图。或者,每个生物都有一个“绘制”方法,该方法接受视图作为参数,并且视图要求每个生物绘制自己,并向其传递对视图的引用。

使用此模式,您可以轻松拥有多个视图,但不必更新生物以了解它们。同样,您可以更改存储和管理生物的方式,并且视图不需要知道任何相关信息。