强智科技·教务网成绩爬取系列文章之wxpython·GUI简单设计Ⅲ

秋风萧瑟,提前祝大家七夕快乐!!!

  • 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个窗体MainFrameTipsFrameHelpFrame进行联动交流,当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中的方法)。

你可能感兴趣的:(强智科技·教务网成绩爬取系列文章之wxpython·GUI简单设计Ⅲ)