【问题标题】:wxPython Frame disable/enable?wxPython 框架禁用/启用?
【发布时间】:2011-01-26 17:18:49
【问题描述】:

我创建了一个 wx.Frame(我们称之为 mainFrame)。此框架包含一个按钮,当单击该按钮时,会创建一个新框架(我们称之为 childFrame)。

我想知道如何在创建 childFrame 时禁用 mainFrame,并在 childFrame 破坏/关闭时再次启用 mainFrame?

问候,

【问题讨论】:

标签: wxpython


【解决方案1】:

也许你想要这样的东西:


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

【讨论】:

  • 哇,这正是我需要的
【解决方案2】:

可能你不需要另一个框架,而是一个模态对话框,例如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2016-11-13
    • 2011-03-22
    • 1970-01-01
    • 2023-04-03
    • 2012-01-02
    相关资源
    最近更新 更多