2009-06-17 5 views
0

Ich möchte modalen Dialog schaffen, der jedoch nicht in einem modalen Art und Weise, dh Steuerfluss solltewxProgressDialog Verhalten für eine wxDialog

weiterhin verhalten soll, wenn ich tun

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

print "xxx" 

dlg.Destroy() 

„xxx“ nicht bekommen im Falle des Fortschritts gedruckt, aber

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

dlg.Destroy() 

Dialog "xxx" wird

gedruckt werden, so b asisch ich möchte wx.PD__APP__MODAL für einen normalen Dialog erreichen?

Antwort

0

Es war sehr trivial, nur Stil mit wx.PD_APP_MODAL in wx.Dialog es modal sein kann, ohne den Programmablauf zu stoppen, wird nur eine Benutzereingabe zu App blockiert, dachte ich PD_APP_MODAL ist nur für Fortschrittsdialog

1

Verwenden Sie einfach Show anstelle von ShowModal.

Wenn Ihre Funktion (der print "xxx" Teil) für eine lange Zeit ausgeführt wird, müssen Sie entweder manuell wx.SafeYield aufrufen oder Ihre Arbeit in einen separaten Thread verschieben und benutzerdefinierte Ereignisse an Ihren Dialog senden.

Noch ein Tipp. Wie ich es verstehe, möchten Sie Code ausführen, nachdem der modale Dialog angezeigt wird, hier ist ein kleiner Trick für eine spezielle Bindung an EVT_INIT_DIALOG, die genau das bewerkstelligt.

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() 
+0

aber mit Show wird es nicht modal sein, modal es der Sinn die Verwendung kann nicht mit Rest der App interagieren –

+0

Es scheint mir, dass Sie versuchen, einige Logik, die an diesen Dialog außerhalb davon gebunden ist, zu erzwingen. Gibt es einen guten Grund dafür? Warum kann der Dialog "xxx" nicht drucken, wenn er angezeigt wird? –

+0

, weil ich einen dritten Teil lib UI ausführen muss, die selbst eine lange dauert initialisieren und kann nur in Haupt-Thread initialisiert werden, so dass ich einen Fortschrittsdialog während der Initialisierung anzeigen möchte, kann ich progressDialog verwenden, aber es ist abgeneigt Anpassung –

Verwandte Themen