GUI设计问题

2 投票
1 回答
683 浏览
提问于 2025-04-16 10:34

我在用tkinter,但我想问的问题可能比较普遍。

这是我第一次设计图形用户界面(GUI)。我把每个对象都建模成一个类,但我不太明白怎么把GUI的类结构和其他类结构结合起来。

比如说,我有一些生物:

# this is before I had any GUI in my code
class Creature:
  def current_position() # returns real-time x, y coords
    # ...

我想把它们显示成在画布上移动的圆圈。我觉得把运动的图形表现放在class Creature里的一个方法update_display里是合理的。但是,这样的话,class Creature就得知道关于GUI的细节。此外,class App(tkinter.Tk)里的redraw方法也需要知道所有现存的Creature实例的列表,以便调用它们的update_display方法。这就造成了太多的依赖关系。

那正确的做法是什么呢?

1 个回答

4

这个大家都认可的模式叫做模型/视图/控制器。你有一个控制器对象,它既了解所有的生物(也就是你的“模型”),也了解图形用户界面(也就是你的“视图”)。控制器的任务就是把这两者连接起来。比如说,你的视图可以有一个叫“draw_creature”的方法,它接受一个生物作为输入。然后,控制器会遍历所有生物,把它们一个一个传给视图。或者,每个生物都有一个“draw”方法,接受视图作为参数,视图会请求每个生物自己画自己,同时把视图的引用传给它。

有了这个模式,你可以轻松地拥有多个视图,而生物不需要更新来了解这些视图。同样地,你可以改变存储和管理生物的方式,而视图也不需要知道这些变化。

撰写回答