Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用模型-视图-控制器体系结构创建python消息对话框?_Python_Design Patterns_Dialog_Wxpython - Fatal编程技术网

是否可以使用模型-视图-控制器体系结构创建python消息对话框?

是否可以使用模型-视图-控制器体系结构创建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 |

我正在尝试创建一个包含所有消息对话框的类,这样我就不需要将它们与我的逻辑混合在一起。目的是让GUI代码远离非GUI内容,我想实现一个好的模型-视图-控制器体系结构

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。不用担心,我在上面介绍了另一个解决方案。