wxProgressDialog Verhalten für eine wxDialog
-
06-07-2019 - |
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?
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()