wxProgressDialog como o comportamento para uma wxDialog
-
06-07-2019 - |
Pergunta
Eu quero criar diálogo modal, mas que não deve se comportar de forma modal ou seja, fluxo de controle deve continuar
Se eu faço
dlg = wx.Dialog(parent)
dlg.ShowModal()
print "xxx"
dlg.Destroy()
"xxx" não são impressos, mas em caso de progressos diálogo
dlg = wx.ProgressDialog.__init__(self,title, title, parent=parent, style=wx.PD_APP_MODAL)
print "xxx"
dlg.Destroy()
"xxx" vai ser impresso
Então, basicamente eu quero alcançar wx.PD__APP__MODAL para um diálogo normal?
Solução 2
Foi muito trivial, apenas usando estilo wx.PD_APP_MODAL em wx.Dialog permite que ele seja modal sem parar o fluxo do programa, apenas a entrada do usuário para aplicativo é bloqueado, eu pensei PD_APP_MODAL é apenas para o progresso de diálogo
Outras dicas
Apenas uso Show
vez de ShowModal
.
Se a sua função (a parte print "xxx"
) é executado por um longo tempo você terá que wx.SafeYield
chamada manualmente de vez em quando ou mover o seu trabalho a um fio e personalizados de envio separados eventos para o seu diálogo com ele.
Mais uma dica. Pelo que entendi, você quer executar algum código após o diálogo modal é mostrado, aqui está um pequeno truque para um ligamento especial para EVT_INIT_DIALOG
que realiza exatamente isso.
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()