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

6
我创建了一个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-CRITICAL **: gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed

如何“安全地”销毁对话框而不必点击对话框按钮?

3个回答

1

我已经有一段时间没有使用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()

谢谢回复!我已经尝试过这个方法,但是发现对话框没有消失。 - Akira

1
我会使用 wx.Timer()。
import wx

########################################################################
class MyDialog(wx.Dialog):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Dialog.__init__(self, None, title="Test")

        timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.onTimer, timer)
        timer.Start(5000)

        self.ShowModal()

    #----------------------------------------------------------------------
    def onTimer(self, event):
        """"""
        print "in onTimer"
        self.Destroy()

if __name__ == "__main__":
    app = wx.App(False)
    dlg = MyDialog()
    app.MainLoop()

另请参阅http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/


0

我对 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) 会退出提示符并移动到下一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接