【问题标题】:WxPython window not closingWxPython 窗口未关闭
【发布时间】:2020-12-16 15:39:20
【问题描述】:

我学习了如何使用 WxPython 检测窗口关闭,但我遇到了一个问题。当我点击右上角的“X”时,我希望会出现一个对话框,上面写着“您确定要退出吗?”和 2 个按钮,是或否出现。没事儿。但是当我单击“是”时,它应该关闭,但是当我单击“否”时,它应该不会关闭。否工作正常但是当我单击是时,对话框关闭并再次打开,我无法关闭主应用程序......我不得不使用任务管理器......我做错了什么?请帮我!这是我的关闭函数:

def OnExit(self, event):
    
    if event.GetEventType() == wx.EVT_CLOSE.typeId:
        
        dial = wx.MessageDialog ( None, 'Are you sure you want to exit?', 'Exclamation',
        wx.YES_NO | wx.ICON_EXCLAMATION )
        
        if dial.ShowModal() == wx.ID_NO:
            
            pass
        
        else:
            self.Close()

请帮帮我!任何回复将不胜感激!提前致谢!

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    毕竟,您正在调用self.Close(),因此创建了一个新的 EVT_CLOSE 事件,将您置于无限循环中。
    And,由于您的 if 语句的结构,您不能再用File->Quit关闭程序,使用菜单。
    我会建议一些类似的东西。

        if event.GetEventType() == wx.EVT_CLOSE.typeId:
            
            dial = wx.MessageDialog ( self, 'Are you sure you want to exit?', 'Exclamation',
            wx.YES_NO | wx.ICON_EXCLAMATION )
            
            if dial.ShowModal() == wx.ID_NO:
                return
            
        self.Destroy()
    

    【讨论】:

    • 关闭 wx.Frame 的正确方法是 wx.Frame.Destroy()
    • 是的,事实上我赞成,评论是为了支持你回答中的代码所说的内容
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多