【发布时间】:2015-08-25 14:13:11
【问题描述】:
我在一堂课上有一个工作计划。我希望将其转换为 MVC 模式。
我已将观察者设计实现为shown here,并为模型、视图和控制器打开了 3 个.py 文件。
我很难理解去哪里了。
例如: 原类中的这段代码
helpMenu = wx.Menu()
helpMenu.Append(ID_ABOUT, "&About", "Display info")
self.Bind(event=wx.EVT_MENU, handler=self.OnHelpAbout, id=ID_ABOUT)
...
def OnHelpAbout(self,e):
title = self.GetTitle()
d = wx.MessageDialog(self, "About " + title, title, wx.ICON_INFORMATION | wx.OK)
d.ShowModal()
d.Destroy()
这个菜单代码行应该在View中,函数OnHelpAbout应该在Controler中实现。但我怎么称呼它?我应该在视图中有一个控制器实例吗?我在哪里为观察员签名?
另外,如果此函数设置了一个对话框 = 在视图中进行更改,我该怎么做?如果我理解正确,我需要在视图中调用另一个函数并将代码放在那里?
我想我缺少的是一个可以使用的基本模板。我还没有找到任何解释如何使用 GUI 和 GUI 事件的来源。
【问题讨论】:
-
GUI 代码通常是“视图”。事件处理程序只会调用“控制器”中的内容。除非您有数据库或使用 XRC 之类的东西,否则模型很难定义。
-
我知道。设置问题是因为在我的情况下 OnHelpAbout 是控制器功能也需要更改视图。所以我问我该怎么做。另外,我如何在控制器中设置事件。我应该在 GUI 中有一个控制器实例吗?
-
是的,这变得一团糟。我没有严格遵守规则,因为我认为它们不能很好地与桌面 GUI 库一起使用。但是,您可以使用 pubsub 从控制器向视图发送一条消息,告诉它进行更新。至于您的第二个问题,我只需将控制器模块导入您的 GUI 代码并适当地调用它们:
controller.DoSomething()
标签: python model-view-controller wxpython observer-pattern