2009-06-17 34 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