2009-06-17 171 views
0

行爲我想創建一個模式對話框,但不應該在一個模式的行爲方式,即控制流應繼續wxProgressDialog像一個wxDialog

,如果我做

dlg = wx.Dialog(parent) 
dlg.ShowModal() 

print "xxx" 

dlg.Destroy() 

「XXX」不會得到印刷,但在進展情況對話框

dlg = wx.ProgressDialog.__init__(self,title, title, parent=parent, style=wx.PD_APP_MODAL) 
print "xxx" 

dlg.Destroy() 

「XXX」 將得到印刷

所以b asually 我想實現一個普通對話框的wx.PD__APP__MODAL?

回答

0

這是非常微不足道的,只是用wx.PD_APP_MODAL風格的wx.Dialog允許它是模式無需停止程序流,只有用戶輸入到應用程序被阻止,我以爲PD_APP_MODAL僅供進度對話框

1

只需使用Show而不是ShowModal

如果你的函數(print "xxx"部分)很長一段時間運行,你將不得不手動調用wx.SafeYield每隔一段時間或你的工作轉移到一個單獨的線程,並從它發送自定義事件到您的對話框。

還有一個提示。據我所知,你想在顯示模態對話框後執行一些代碼,這裏有一個特殊的綁定到EVT_INIT_DIALOG這個小技巧就完成了。

import wx 

class TestFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     btn = wx.Button(self, label="Show Dialog") 
     btn.Bind(wx.EVT_BUTTON, self.ShowDialog) 

    def ShowDialog(self, event): 
     dlg = wx.Dialog(self) 
     dlg.Bind(wx.EVT_INIT_DIALOG, lambda e: wx.CallAfter(self.OnModal, e)) 
     dlg.ShowModal() 
     dlg.Destroy() 

    def OnModal(self, event): 
     wx.MessageBox("Executed after ShowModal") 

app = wx.PySimpleApp() 
app.TopWindow = TestFrame() 
app.TopWindow.Show() 
app.MainLoop() 
+0

但顯示它不會模式,模式它的意義上,使用無法與應用程序的其餘部分進行交互 – 2009-06-17 16:47:48