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?

Foi útil?

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()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top