如何关闭子对话窗口而不关闭wxPython中的父对话窗口

时间:2017-12-01 09:32:00

标签: python dialog wxpython frame wxwidgets

我正在使用wx(3.0.2.0)在Python(2.7)中开发GUI。

主框架是一个Frame对象,我有一个按钮,弹出一个Dialog窗口子对象。在此对话框窗口中,我还有一个按钮,再次打开另一个Dialog窗口子窗口,并隐藏第一个Dialog窗口(以避免打开太多窗口)。现在在最后一个对话窗口,我有一个关闭按钮,我想要的是这个按钮关闭对话框并显示父对话窗口(之前已隐藏),而不关闭它。

我无法做到这一点,每次关闭最后一个Dialog窗口时,它也关闭了父对话窗口,我最终在主框架上。

有人知道如何做到这一点吗?

以下是示例代码:

import wx

class AST_MainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)

        self.configure_project_btn = wx.Button(self, 1, "Configure 1")
        self.Bind(wx.EVT_BUTTON, self.on_configure, id=1)

    def on_configure(self, event):
        test_frame = AST_SheetFrame(self)
        test_frame.ShowModal()
        test_frame.Destroy()


class AST_SheetFrame(wx.Dialog):
    def __init__(self, parent):
        super(AST_SheetFrame, self).__init__(parent, style=(wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER))

        self.configure_project_btn = wx.Button(self, 2, "Configure 2")
        self.Bind(wx.EVT_BUTTON, self.on_configure, id=2)

    def on_configure(self, event):
        test_frame = AST_ModuleFrame(self)
        test_frame.ShowModal()
        test_frame.Destroy()


class AST_ModuleFrame(wx.Dialog):
    def __init__(self, parent):
        super(AST_ModuleFrame, self).__init__(parent, style=(wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER))
        self.parent = parent

        self.save_n_quit_btn = wx.Button(self, wx.ID_CLOSE, "Save and Close")
        self.Bind(wx.EVT_BUTTON, self.on_quit, id=wx.ID_CLOSE)
        self.Bind(wx.EVT_CLOSE, self.on_quit)
        self.parent.Hide()

    def on_quit(self, event):
        self.parent.Show()
        self.Destroy()


class GUI(wx.App):
    def OnInit(self):
        app = AST_MainFrame(None, -1, "Main frame")
        app.Show(True)
        return True


def main():
    app = GUI(0)
    app.MainLoop()

if __name__ == '__main__':
    main()

0 个答案:

没有答案