Pregunta

Quiero crear un diálogo modal pero que no debería comportarse de manera modal, es decir, el flujo de control debería continuar

si lo hago

 dlg = wx.Dialog(parent)
 dlg.ShowModal()

 print "xxx"

 dlg.Destroy()

" xxx " no se imprimirá, pero en caso de diálogo de progreso

dlg = wx.ProgressDialog.__init__(self,title, title, parent=parent, style=wx.PD_APP_MODAL)
print "xxx"

dlg.Destroy()

" xxx " se imprimirá

¿Entonces básicamente quiero lograr wx.PD__APP__MODAL para un diálogo normal?

¿Fue útil?

Solución 2

Fue muy trivial, solo usando el estilo wx.PD_APP_MODAL en wx.Dialog permite que sea modal sin detener el flujo del programa, solo la entrada del usuario a la aplicación está bloqueada, pensé que PD_APP_MODAL es solo para el diálogo de progreso

Otros consejos

Simplemente use Show en lugar de ShowModal .

Si su función (la parte print " xxx " ) se ejecuta durante mucho tiempo, deberá llamar manualmente a wx.SafeYield de vez en cuando o mover su trabaje en un hilo separado y envíe eventos personalizados a su diálogo desde él.

Un consejo más. Según tengo entendido, desea ejecutar algún código después de que se muestre el cuadro de diálogo modal, aquí hay un pequeño truco para un enlace especial a EVT_INIT_DIALOG que logra eso.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top