wxPython Frame деактивиране/разрешаване?

Създадох wx.Frame (нека го наречем mainFrame). Тази рамка съдържа бутон върху себе си, когато се щракне върху бутона, се създава нова рамка (нека я наречем childFrame).

Искам да знам как да деактивирам mainFrame, когато childFrame е създаден, и да активирам mainFrame отново, когато childFrame е унищожен/затворен?

Поздрави,


person MA1    schedule 12.03.2010    source източник
comment
Изглежда wx.Frame вече няма метода MakeModal... https://wxpython.org/Phoenix/docs/html/MigrationGuide.html#makemodal Така че можете да внедрите показания фрагмент (от връзката) във вашата дъщерна рамка и той работи в комбинация с приет отговор от @Alex.   -  person Honza S.    schedule 01.01.2020


Отговори (2)


Може би искате нещо подобно:


import wx

class MainFrame(wx.Frame): 
    def __init__(self): 
        wx.Frame.__init__(self, None, wx.NewId(), "Main") 
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.button = wx.Button(self, wx.NewId(), "Open a child")
        self.sizer.Add(self.button, proportion=0, border=2, flag=wx.ALL)
        self.SetSizer(self.sizer)
        self.button.Bind(wx.EVT_BUTTON, self.on_button)

        self.Layout()

    def on_button(self, evt):
        frame = ChildFrame(self)
        frame.Show(True)
        frame.MakeModal(True)

class ChildFrame(wx.Frame): 
    def __init__(self, parent): 
        wx.Frame.__init__(self, parent, wx.NewId(), "Child")
        self.Bind(wx.EVT_CLOSE, self.on_close)

    def on_close(self, evt):
        self.MakeModal(False)
        evt.Skip()

class MyApp(wx.App):
    def OnInit(self):
        frame = MainFrame()
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop()    
person Alex    schedule 14.03.2010
comment
УАУ, точно това ми трябва - person おおさま; 30.11.2013

Може да не се нуждаете от друга рамка, а от модален диалог, напр.

import wx

app = wx.PySimpleApp()
mainFrame = wx.Frame(None, title="Click inside me")
def onMouseUp(event):
    dlg = wx.Dialog(mainFrame,title="I am modal, close me first to get to main frame")
    dlg.ShowModal()

mainFrame.Bind(wx.EVT_LEFT_UP, onMouseUp)
mainFrame.Show()
app.SetTopWindow(mainFrame)
app.MainLoop()
person Anurag Uniyal    schedule 13.03.2010