是否可以使用模型-视图-控制器体系结构创建python消息对话框?
我正在尝试创建一个包含所有消息对话框的类,这样我就不需要将它们与我的逻辑混合在一起。目的是让GUI代码远离非GUI内容,我想实现一个好的模型-视图-控制器体系结构是否可以使用模型-视图-控制器体系结构创建python消息对话框?,python,design-patterns,dialog,wxpython,Python,Design Patterns,Dialog,Wxpython,我正在尝试创建一个包含所有消息对话框的类,这样我就不需要将它们与我的逻辑混合在一起。目的是让GUI代码远离非GUI内容,我想实现一个好的模型-视图-控制器体系结构 class errorMessageDialog(wx.MessageDialog): def __init__(self, message, caption= 'Error'): wx.MessageDialog.__init__(self, None, message, caption, wx.OK |
class errorMessageDialog(wx.MessageDialog):
def __init__(self, message, caption= 'Error'):
wx.MessageDialog.__init__(self, None, message, caption, wx.OK | wx.ICON_ERROR)
self.ShowModal()
self.Destroy()
我已经成功地为简单的错误消息(参见上面的示例)创建了一个消息对话框,用户可以在其中选择OK或Cancel。在这种情况下,该方法应返回布尔值。我尝试了以下方法:
class safetyCheck(wx.MessageDialog):
def __init__(self, message="Make sure the following commands are correct", caption= 'Safety Warning'):
wx.MessageDialog.__init__(self, None, message, caption, wx.OK | wx.CANCEL | wx.CENTRE | wx.ICON_EXCLAMATION)
if self.ShowModal() == wx.ID_OK:
safetyCheckPassed = True
else:
safetyCheckPassed = False
return safetyCheckPassed
self.Destroy()
我可能弄错了,但我认为我试图实现的是不可能的,因为self.Destroy方法必须在返回之前调用,因此返回行永远不会运行
显然,我可以在模型代码中创建对话框,但这会很混乱
编辑:
我考虑了下面的建议,但我没有成功地完成这些工作,我最终得到了这个解决方案
class SafetyCheckAFT(wx.MessageDialog):
def __init__(self):
pass
def dialog(self):
message="Make sure the following commands are correct"
caption= 'Safety Warning'
dlg= wx.MessageDialog(None, message, caption, wx.OK | wx.CANCEL | wx.CENTRE | wx.ICON_EXCLAMATION)
if dlg.ShowModal() == wx.ID_OK:
self.safetyCheckPassed = True
else:
self.safetyCheckPassed = False
dlg.Destroy()
def isSaftyCheckPassed(self):
return self.safetyCheckPassed
sc=SafetyCheckAFT()
sc.dialog()
if sc.isSaftyCheckPassed():
print("cool beans")
看看:
使用pythonwith语句和\uuuuuuuuuuuuu
语句,您应该能够清理您的资源
您还可以尝试使用try:和finally:将return语句放在try的末尾,并在finally中进行清理:
不过,我还没有对此进行测试,我已经有一段时间没有使用python了。让我建议另一种解决方案。您还可以使用一个帮助器类为您创建对话框: 模型->助手->安全检查 helper类有一个静态方法,该方法创建对话框,保存结果,销毁对话框,然后返回结果
class safetyCheck(wx.MessageDialog):
def __init__(self, message="Make sure the following commands are correct", caption= 'Safety Warning'):
wx.MessageDialog.__init__(self, None, message, caption, wx.OK | wx.CANCEL | wx.CENTRE | wx.ICON_EXCLAMATION)
def ShowModal(self):
return wx.MessageDialog.ShowModal() == wx.ID_OK
class Helper:
@staticmethod
def safety_check_popup(*args, **kwargs):
dialog = safetyCheck(*args, **kwargs)
result = dialog.ShowModal()
dialog.Destroy()
return result
我考虑过你的想法,但你的代码不起作用。我找到了不同的解决方案。抱歉,我无法用wx测试它。我现在只安装了Python3.4。不用担心,我在上面介绍了另一个解决方案。