多个控制器遵循MVC规则

2024-09-27 07:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我对按照wxPython上的MVC规则编写Python应用程序有点怀疑。在

示例:

MainForm

PanelLst (ListCtrl + Some buttons)

PanelTree (TreeCtrl + ProgressBar)

我创建了3个视图(ListView、TreeView、ButtonView) 我还创建了3个控制器(ListController、TreeController、buttoncontroller) 在主应用程序中,我有一个管理一些模型的对象(objManager)。在

所有3个控制器都有一个指向应用程序对象管理器()执行某些任务。在

Eg: click on a row in ListController execute App.objManager().foo1

click on a button in ButtonController execute App.objManager().bar1, ecc...

这里的问题是…我怀疑那些“我的”结构。。。在

  1. 在使用它的每个控制器中传递指向objManager的指针是否正确?在
  2. 其他控制器之间如何通信? 实际上,我用了一个类似的方法,比如模型。使用wxPythonpublisher.sendMessage(事件、数据)publisher.subscribe(EVENT,onEvent)但我认为这不是最好的方法。。在

下一个疑问:

TreeController,接收来自模型的消息。必须在树中加载一个大列表,显示进度。 我已经用了一个线程wx.事件后,但什么解决方案更好?在

解决方案1:

进度条()

# Callback via publisher.subscrive(self.onUpdateStatus, "UPDATE_STATUS")
def onUpdateStatus(self, msg)
    nValue = msg.data
    self.gauge.setValue(nValue)

树视图()

^{pr2}$

TreeCTRL()

 # Callback function via publisher.subscribe(self.onLoadTree, "LOAD_TREE")
 def onLoadTree():
     items = self.objManager.getList()
     self.hTreeView.loadTree(items)

解决方案2

进度条()

# Callback via publisher.subscrive(self.onUpdateStatus, "UPDATE_STATUS")
def onUpdateStatus(self, msg)
    nValue = msg.data
    self.gauge.setValue(nValue)

树视图()

def loadTree(self, item):
    self.addTreeItem(item)

TreeCTRL()

 # Callback function via publisher.subscribe(self.onLoadTree, "LOAD_TREE")
 def onLoadTree():
     items = self.objManager.getList()
     for nItem, item in enumerate(items):
         self.hTreeView.loadTree(item)
         pub.sendMessage(UPDATE_STATUS, item)

什么解决方案更好?在第一个解决方案中,是发送消息以更新GUI的视图。第二种解决方案是发送消息的控制器。。 不确定这2个解决方案是控制器/视图之间通信的最佳实践。。在

谢谢,对不起,我的英语不好。。。在


Tags: self视图defcallbackitemsmsg控制器解决方案
1条回答
网友
1楼 · 发布于 2024-09-27 07:18:46

我认为使用pubsub是模型和控制器之间完全合法的通信方式。几个月前,我与另一个wxPython开发人员合作创建了一个示例应用程序,该应用程序演示了一种方法。您可以在这里看到我们的代码:https://bitbucket.org/driscollis/medialocker

我希望这能帮助您组织代码。当然,代码设计是一个非常个人化和主观化的话题。你需要使用你最熟悉和理解的东西。

相关问题 更多 >

    热门问题