我想创建模态对话框但不应该以模态方式运行,即控制流应该继续
如果我这样做
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”将被打印
所以基本上我想为普通对话框实现wx.PD__APP__MODAL?
答案 0 :(得分: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()
答案 1 :(得分:0)
这非常简单,只是在wx.Dialog中使用wx.PD_APP_MODAL样式允许它在不停止程序流的情况下进行模态,只有用户输入到应用程序被阻止,我认为PD_APP_MODAL仅用于进度对话框