我有两个py文件,每个文件都有自己的框架,使用wxPython,MainWindow和RecWindow。 MainWindow使用关键字“recovery”包含RecWindow python文件。
MainWindow代码:
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)
RecWindow代码:
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再次展示自己?
答案 0 :(得分:0)
使用pubsub向主窗口发送消息,告诉它再次显示自己。我实际上有一个如何做到这一点的例子:
请注意,本教程使用的是wxPython 2.8中提供的稍旧的API。如果你正在使用wxPython 2.9,那么你将不得不使用我在本文中详述的稍微不同的API:
答案 1 :(得分:0)
当您创建RecWindow的实例时,请在main_window上保留对它的引用并绑定到它的close事件。
在main_window的close处理程序中,检查窗口是否为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()