0

我有两个 py 文件,每个文件都有自己的框架,使用 wxPython、MainWindow 和 RecWindow。MainWindow 包含使用关键字“recovery”的 RecWindow python 文件。

主窗口代码:

class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
    wx.Frame.__init__(self, parent, wx.ID_ANY,title,pos=(500,200), size = (650,500), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
    self.Bind(wx.EVT_CLOSE,self.OnExit)
    self.SetIcon(wx.Icon('etc\icons\download.ico', wx.BITMAP_TYPE_ICO))
    panel = wx.Panel(self)

录制窗口代码:

class RecWindow(wx.Frame):
def __init__(self,parent,id,title):
    wx.Frame.__init__(self, parent, wx.ID_ANY,title,pos=(400,200), size = (700,600), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
    self.SetIcon(wx.Icon('etc\icons\download.ico', wx.BITMAP_TYPE_ICO))
    self.count = 0

当我单击 MainWindow 中的按钮时,它将隐藏 MainWindow 创建 RecWindow 的实例,如下所示;

def OpenRec(self,event):#this will be used to open the next frame
    OR = recovery(None,-1,"RAVE")
    OR.Show(True)
    MainWindow.Hide()

现在,我不确定在关闭 RecWindow 后如何返回 MainWindow。RecWindow 有一个取消和完成按钮,它们都映射到 self.close() 函数。然后我将如何让 MainWindow 再次显示自己?

4

2 回答 2

0

使用 pubsub 向主窗口发送一条消息,告诉它再次显示自己。我实际上有一个如何在此处执行此操作的示例:

请注意,本教程使用的是 wxPython 2.8 中提供的稍旧的 API。如果您使用的是 wxPython 2.9,那么您将不得不使用我在本文中详述的稍微不同的 API:

于 2013-11-12T17:00:36.110 回答
0

当您创建 RecWindow 的实例时,请在 main_window 上保留对它的引用并绑定到它的关闭事件。

在 main_window 的关闭处理程序中,检查关闭的窗口是否是 RecWindow。

如果是,请清除对它的引用并显示 main_window。

Elif 关闭的窗口是 main_window 执行任何需要的代码。

最后调用 event.Skip() 使窗口被破坏。

import wx


class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, (500, 200), (650, 500),
            wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)

        panel = wx.Panel(self)
        button = wx.Button(panel, wx.ID_OPEN)

        panel.sizer = wx.BoxSizer(wx.VERTICAL)
        panel.sizer.Add(button, 0, wx.ALL, 7)
        panel.SetSizer(panel.sizer)

        button.Bind(wx.EVT_BUTTON, self.on_button)
        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.rec_window = None

    def on_button(self, event):
        rec_window = RecWindow(self, 'Rec window')
        rec_window.Show()
        self.Hide()
        rec_window.Bind(wx.EVT_CLOSE, self.on_close)
        self.rec_window = rec_window

    def on_close(self, event):
        closed_window = event.EventObject
        if closed_window == self.rec_window:
            self.rec_window = None
            self.Show()
        elif closed_window == self:
            print 'Carry out your code for when Main window closes'
        event.Skip()


class RecWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, (400, 200), (700, 600),
            wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)


app = wx.App(False)
main_window = MainWindow(None, 'Main window')
main_window.Show()
app.MainLoop()
于 2013-11-12T18:48:33.447 回答