Question

Je veux créer un dialogue modal mais qui ne devrait pas se comporter de manière modale, c'est-à-dire que le flux de contrôle devrait continuer

si je le fais

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

 print "xxx"

 dlg.Destroy()

& xxx " ne sera pas imprimé, mais en cas de dialogue de progression

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

dlg.Destroy()

& xxx " sera imprimé

donc en gros je veux atteindre wx.PD__APP__MODAL pour un dialogue normal?

Était-ce utile?

La solution 2

C’était très simple, utiliser le style wx.PD_APP_MODAL dans wx.Dialog lui permet d’être modal sans arrêter le déroulement du programme, seule la saisie de l’utilisateur sur l’app est bloquée.

Autres conseils

Utilisez simplement Show au lieu de ShowModal .

Si votre fonction (la partie print "xxx" ) est exécutée pendant longtemps, vous devrez soit appeler manuellement wx.SafeYield , soit déplacer votre travaillez sur un thread séparé et envoyez des événements personnalisés à votre boîte de dialogue à partir de celle-ci.

Un autre conseil. Si je comprends bien, vous souhaitez exécuter du code une fois que la boîte de dialogue modale est affichée. Voici un petit truc pour une liaison spéciale à EVT_INIT_DIALOG qui accomplit exactement cela.

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top