Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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
如何安全地销毁wxPython应用程序的对话框窗口?_Python_Wxpython - Fatal编程技术网

如何安全地销毁wxPython应用程序的对话框窗口?

如何安全地销毁wxPython应用程序的对话框窗口?,python,wxpython,Python,Wxpython,我创建了一个wxPython应用程序,它在对话框窗口中显示一些消息。在单击对话框确定按钮之前,应用程序需要强制销毁对话框窗口。我使用wx.lib.delayedresult进行销毁调用 我的代码是: import wx dlg=wx.MessageDialog(somewindow,'somemessage') from wx.lib.delayedresult import startWorker def _c(d): dlg.EndModal(0) dlg.Destroy()

我创建了一个wxPython应用程序,它在对话框窗口中显示一些消息。在单击对话框确定按钮之前,应用程序需要强制销毁对话框窗口。我使用wx.lib.delayedresult进行销毁调用

我的代码是:

import wx
dlg=wx.MessageDialog(somewindow,'somemessage')
from wx.lib.delayedresult import startWorker
def _c(d):
    dlg.EndModal(0)
    dlg.Destroy()
def _w():
    import time
    time.sleep(1.0)
startWorker(_c,_w)
dlg.ShowModal()
当我收到下面的错误消息时,这可以做我想做的事情:

(python:15150):Gtk关键**:Gtk_小部件_销毁:断言“Gtk_是_小部件(小部件)”失败


如何在不单击对话框按钮的情况下“安全”销毁对话框?

我已经有一段时间没有使用wxWidgets了,但我认为您的dlg.destroy()可能位于错误的位置。尝试将其移动到主线程中

import wx
dlg=wx.MessageDialog(somewindow,'somemessage')
from wx.lib.delayedresult import startWorker
def _c(d):
    dlg.EndModal(0)
def _w():
    import time
    time.sleep(1.0)
startWorker(_c,_w)
dlg.ShowModal()
dlg.Destroy()
我会使用wx.Timer()


另请参见我的
dlg.Destroy()
问题是它没有退出提示。 我已执行以下操作以退出提示:

def OnCloseWindow(self, e):    
    dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question',
                            wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
    ret = dial.ShowModal()
    if ret == wx.ID_YES:
        self.Destroy()
        sys.exit(0)

sys.exit(0)
将退出提示并移到下一行。

感谢您的回复!我已经试过了,发现对话并没有消失。
def OnCloseWindow(self, e):    
    dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question',
                            wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
    ret = dial.ShowModal()
    if ret == wx.ID_YES:
        self.Destroy()
        sys.exit(0)