2011-09-08 12 views
5

Bir iletişim penceresinde bazı mesajları gösteren bir wxPython uygulaması oluşturdum. İletişim kutusu OK düğmesine basmadan önce uygulama tarafından zorla yok edilmek için diyalog penceresine ihtiyaç vardır. Ben yok çağrı yapmak için wx.lib.delayedresult kullanılır.Bir wxPython uygulamasının iletişim penceresini güvenli bir şekilde nasıl yok edebilirim?

Benim kodudur:

(piton: 15150): Gtk KRİTİK **: gtk_widget_destroy Bu aşağıda bir hata mesajı var ise ben yapmak isteyen ne yapabilirim

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() 

: onaylama işlemi `GTK_IS_WIDGET (widget)'

nasıl 'güvenli' iletişim butonuna tıklamadan bir diyalog yok edersin başarısız?

cevap

0

wxWidgets'ı kullandığımdan beri bir süredir var ama bence dlg.Destroy() yanlış yerde olabilir. Ana parçacığa taşımayı deneyin.

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() 
+0

Yanıtladığınız için teşekkür ederiz! Bunu daha önce denedim ve iletişim kutusunun kaybolmadığını gördüm. – Akira

0

Ben

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() 

dlg.Destroy() ile de http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

0

Sorunum bakın bir wx.Timer() kullanırsınız o istemini çıkan olmamasıdır. Ben istemini çıkmak için aşağıdaki yapmış:

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) istemini çıkmak ve bir sonraki satıra taşınır.

İlgili konular