秋风萧瑟,提前祝大家七夕快乐!!!
- GUIManager.py是GUI各个窗体切换和联动的中枢,代码实现比较简单,但是其背后的深意请自行领会。
- Main.py是该GUI应用的主程序所在,也就是运行Main.py可以打开该应用程序。
代码实现
- GUImanager.py
import frame
class Manager():
def __init__(self,UpdateUI):
self.UpdateUI = UpdateUI
self.frameDict = {} # 用来装载已经创建的Frame对象
def GetFrame(self,number):
frame = self.frameDict.get(number)
if frame:
pass
else:
frame = self.CreateFrame(number)
self.frameDict[number] = frame
return frame
def CreateFrame(self,number):
if number == 0:
return frame.MainFrame(id=number, size=(1025, 620), UpdateUI=self.UpdateUI)
elif number == 1:
return frame.TipsFrame(id=number, size=(770,360), UpdateUI=self.UpdateUI)
#* pos=(wx.DisplaySize()[0]/2, wx.DisplaySize()[1]/2
elif number == 2:
return frame.HelpFrame(id=number, size=(750, 400), UpdateUI=self.UpdateUI)
- Main.py
import wx
from guimanager import Manager
class MainApp(wx.App):
def OnInit(self):
self.guimanager = Manager(self.UpdateUI)
self.frame = self.guimanager.GetFrame(number=0)
self.frame.Show()
self.SetTopWindow(self.frame)
return True
def UpdateUI(self,number):
self.frame = self.guimanager.GetFrame(number)
self.frame.Show(True)
def main():
app = MainApp()
app.MainLoop()
if __name__ == '__main__':
main()
代码解释
这里GUImanager.py中创建了一个类Manager,它包含两个自建方法GetFrame
(用于获取窗体Frame)、CreateFrame
(用于将窗体Frame返回到App主循环中予以体现)。该类的初始化变量中,self.UpdateUI
是其精华所在,它通过Main.py中MainApp类中的UpadateUI
方法与Frame.py中的3个窗体MainFrame
、TipsFrame
、HelpFrame
进行联动交流,当frame.py中某个窗体中触发某事件,而该事件又用来显示某个窗体时(即包含self.UpdateUI
语句),则该语句触发MainApp类中的UpdateUI
方法,该方法触发GUImanager中的GetFrame
方法,进而继续触发CreateFrame
方法,然后再返回到MainApp类的UpdateUI
方法中(这个过程的实现语句对应Main.py中的self.frame = self.guimanager.GetFrame(number)
)。这个过程之后,调用self.frame.Show(Ture)
,该语句用于渲染self.Frame
到屏幕上(wxpython中的方法)。