Frage

Ich will Dialog modal schaffen, aber das sollte in einem modalen Art und Weise nicht verhalten Fluss heißt Steuer fortgesetzt werden soll

Wenn ich das tue

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

 print "xxx"

 dlg.Destroy()

„xxx“ nicht erhalten gedruckt, aber im Fall von Fortschrittsdialog

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

dlg.Destroy()

"xxx" wird erhalten gedruckt

also im Grunde Ich mag wx.PD__APP__MODAL für einen normalen Dialog erreichen?

War es hilfreich?

Lösung 2

Es war sehr trivial, nur mit wx.PD_APP_MODAL Stil in wx.Dialog erlaubt es modal zu sein, ohne den Programmablauf zu stoppen, nur Benutzereingaben App blockiert sind, dachte ich, PD_APP_MODAL ist nur für den Fortschritt dialog

Andere Tipps

Just Show anstelle von ShowModal.

Wenn Ihre Funktion (der print "xxx" Teil) für eine lange Zeit läuft müssen Sie entweder manuell jeden anrufen so oft wx.SafeYield oder Ihre Arbeit zu einem separaten Thread bewegen und benutzerdefinierte Ereignisse zu Ihrem Dialog von ihm senden.

Und noch ein Tipp. Wie ich verstehe, wollen Sie einen Code auszuführen, nachdem der modalen Dialog, hier gezeigt wird ein kleiner Trick für eine besondere Bindung an EVT_INIT_DIALOG ist, die genau das erreicht.

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top