2011-09-08 32 views
5

Tôi đã tạo một ứng dụng wxPython hiển thị một số thông báo trên cửa sổ hộp thoại. Cửa sổ hộp thoại là cần thiết để bị hủy bởi ứng dụng trước khi tôi nhấp vào nút OK của hộp thoại. Tôi đã sử dụng wx.lib.delayedresult để thực hiện cuộc gọi hủy.Làm cách nào để hủy an toàn cửa sổ hộp thoại của ứng dụng wxPython?

Mã của tôi là:

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

Điều này có thể làm những gì tôi mong muốn làm trong khi tôi nhận được một thông báo lỗi dưới đây:

(python: 15.150): Gtk-QUAN TRỌNG **: gtk_widget_destroy : xác nhận `GTK_IS_WIDGET (tiện ích con) 'không thành công

Làm cách nào để" an toàn "phá hủy hộp thoại mà không cần nhấp vào nút hộp thoại?

Trả lời

0

Đã lâu rồi kể từ khi tôi sử dụng wxWidgets nhưng tôi nghĩ dlg.Destroy() của bạn có thể sai địa điểm. Hãy thử di chuyển nó vào chủ đề chính.

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

Cảm ơn bạn đã trả lời! Tôi đã thử điều này và thấy rằng hộp thoại không biến mất. – Akira

0

Tôi sẽ sử dụng một 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() 

Xem thêm http://www.blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers/

0

Vấn đề của tôi với dlg.Destroy() là nó không được thoát khỏi dấu nhắc. Tôi đã làm sau để thoát khỏi dấu nhắc:

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) sẽ thoát khỏi dấu nhắc và chuyển sang dòng tiếp theo.

Các vấn đề liên quan