wxProgressDialog喜欢wxDialog的行为
-
06-07-2019 - |
题
我想创建模态对话框但不应该以模态方式运行,即控制流应该继续
如果我这样做
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?
解决方案 2
这非常简单,只是在wx.Dialog中使用wx.PD_APP_MODAL样式允许它在不停止程序流的情况下进行模态,只有用户输入到应用程序被阻止,我认为PD_APP_MODAL仅用于进度对话框
其他提示
只需使用 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()
不隶属于 StackOverflow