我对按照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...
这里的问题是…我怀疑那些“我的”结构。。。在
下一个疑问:
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个解决方案是控制器/视图之间通信的最佳实践。。在
谢谢,对不起,我的英语不好。。。在
我认为使用pubsub是模型和控制器之间完全合法的通信方式。几个月前,我与另一个wxPython开发人员合作创建了一个示例应用程序,该应用程序演示了一种方法。您可以在这里看到我们的代码:https://bitbucket.org/driscollis/medialocker
我希望这能帮助您组织代码。当然,代码设计是一个非常个人化和主观化的话题。你需要使用你最熟悉和理解的东西。
相关问题 更多 >
编程相关推荐