2017-02-06 4 views
0

Ich verwende WxPython Klassik auf Python 27. Ich habe meine Dateien Struktur wie folgt (siehe ua Codes Snippet) anzuwenden: -Wie MakeModal() -Methode auf dem Rahmen mit Kind Dialog

frame.py = this Datei enthält zwei Klassen für Rahmen und Dialog (myframe1 und MyDialog1 respectively)

main.py = diese Datei importieren die Klassen über und enthält auch zwei Unterklassen auf der Grundlage der oben unter (MyFrame2 und MyDialog2 respectively).

Jetzt die Dateistruktur wie oben beibehalten, wie mache ich das Frame-Fenster inaktiv, wenn das Dialogfenster geöffnet wird?

Wie kann die MakeModal() - Methode ordnungsgemäß auf die Dateianordnung/-struktur angewendet werden? Alle Beispiele, die ich bisher gefunden habe, verwenden zwei Frames statt eines Frames und eines Dialogs.

frame.py

import wx 

# ************ FRAME 1 ************ # 
# ************ FRAME 1 ************ # 
class MyFrame1 (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(500,300), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 

     bSizer = wx.BoxSizer(wx.VERTICAL) 

     self.child_button = wx.Button(self, wx.ID_ANY, u"Child Frame", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer.Add(self.child_button, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5) 


     self.SetSizer(bSizer) 
     self.Layout() 

     self.Centre(wx.BOTH) 

     # Connect Events 
     self.child_button.Bind(wx.EVT_BUTTON, self.On_child_button) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def On_child_button(self, event): 
     event.Skip() 



# ************ DIALOG 1 ************ # 
# ************ DIALOG 1 ************ # 
class MyDialog1 (wx.Dialog): 

    def __init__(self, parent): 
     wx.Dialog.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(300,200), style = wx.DEFAULT_DIALOG_STYLE) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 


     self.Centre(wx.BOTH) 

     # Connect Events 
     self.Bind(wx.EVT_CLOSE, self.onClose) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def onClose(self, event): 
     event.Skip() 

main.py

import wx 
from frame import MyFrame1, MyDialog1 


class MyFrame2(MyFrame1): 
    def __init__(self, parent): 
     MyFrame1.__init__ (self, parent) 

    def On_child_button(self, event): 
     MyDialog2(None).Show() 


class MyDialog2(MyDialog1): 
    def __init__(self, parent): 
     MyDialog1.__init__ (self, parent) 

    def onClose(self, event): 
     self.Destroy() 


app = wx.App(0) 
MyFrame2(None).Show() 
app.MainLoop() 
+0

versuchen Sie stattdessen ShowModal(). – Igor

Antwort

0

Sie sollten nicht MakeModal auf dem Rahmen verwenden müssen, wie Dialoge bereits Modalität Funktionalität gebaut haben -im. Rufen Sie einfach die Methode ShowModal des Dialogs anstelle der Show Methode auf. ShowModal erstellt eine verschachtelte Ereignisschleife, so dass ShowModal nicht zurückgibt, bis der Dialog beendet ist, und die Eingabe in die anderen Fenster in der Anwendung wird blockiert. Ein typisches Verwendungsmuster sieht folgendermaßen aus:

with MyDialog(self, foo, bar) as dlg: 
    if dlg.ShowModal() == wx.ID_OK: 
     # do something with dlg values 
+0

Danke, das funktioniert perfekt. –

Verwandte Themen