Comportamiento similar a wxProgressDialog para un wxDialog
-
06-07-2019 - |
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?
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()