使用wxFormBuilder实现用户注册功能---界面部分代码重构

这部分内容主要介绍如何调试自动生成的python代码,在windows系统上显示出来,同时使代码简洁,易于维护。

1、 拷贝noname.py代码到myWin.py

image.png

2、新建mainWin.py文件,用于在windows python3调试环境下,显示设计的GUI界面。

import wx
\# 导入mywin.py中内容
import mywin

\# 创建mainWin类并传入mywin.MyFrame1
class mainWin(mywin.MyFrame1):

   \# 实现Button控件的响应函数showMessage
   def showMessage(self, event):
       self.m_textCtrl1.Clear()
       self.m_textCtrl1.SetValue('hello world')

  if __name__ == '__main__':
      \# 下面是使用wxPython的固定用法
      app = wx.App()

      main_win = mainWin(None)
      main_win.Show()
      app.MainLoop()

windows10 下面,powershell里面调试效果如下:

image.png

3、根据python UI代码重构原则,对myWin.py代码进行重构

重构前:

# -*- coding: utf-8 -*- 

###########################################################################
## Python code generated with wxFormBuilder (version Jun 17 2015)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################

import wx
import wx.xrc

###########################################################################
## Class MyFrame1
###########################################################################

class MyFrame1 ( wx.Frame ):
    
    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
        
        self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
        
        bSizer2 = wx.BoxSizer( wx.VERTICAL )
        
        self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"用户名", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText1.Wrap( -1 )
        bSizer2.Add( self.m_staticText1, 0, wx.ALL, 5 )
        
        self.m_textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer2.Add( self.m_textCtrl1, 0, wx.ALL, 5 )
        
        self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"密码", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText2.Wrap( -1 )
        bSizer2.Add( self.m_staticText2, 0, wx.ALL, 5 )
        
        self.m_textCtrl2 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer2.Add( self.m_textCtrl2, 0, wx.ALL, 5 )
        
        self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"确认密码", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText3.Wrap( -1 )
        bSizer2.Add( self.m_staticText3, 0, wx.ALL, 5 )
        
        self.m_textCtrl3 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer2.Add( self.m_textCtrl3, 0, wx.ALL, 5 )
        
        
        self.SetSizer( bSizer2 )
        self.Layout()
        
        self.Centre( wx.BOTH )
    
    def __del__( self ):
        pass

重构原则:
不要重复:
你应该避免有多个相同功能的段。
当这个功能需要改变时,这维护起来很头疼。

一次做一件事情:
一个方法应该并且只做一件事情。
各自的事件应该在各自的方法中。
方法应该保持短小。

嵌套的层数要少:
尽量使嵌套代码不多于2或3层。
对于一个单独的方法,深的嵌套也是一个好的选择。

避免字面意义上的字符串和数字:
字面意义上的字符串和数字应使其出现在代码中的次数最小化。
一个好的方法是,把它们从你的代码的主要部分中分离出来,并存储于一个列表或字典中。

思考:
既然是调试注册界面,后面必定要增加注册成功后跳转到别的界面的场景(如多Frame场景),所以这里将class MyFrame1改成class RegisterFrame。还要增加一个guiManager.py文件,用于管理注册成功后的界面跳转功能。下篇文章介绍多界面跳转。这里只介绍重构wxFormBuilder自动生成python界面代码。

myWin.py重构后:

# -*- coding: utf-8 -*- 

###########################################################################
## Python code generated with wxFormBuilder (version Jun 17 2015)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################

import wx
import wx.xrc


DEFAULT_REGISTER_LIST = [u"用户名",u"密码",u"确认密码"]
###########################################################################
## Class RegisterFrame
###########################################################################

class RegisterFrame( wx.Frame ):
    
    def __init__( self, parent, id = -1, UpdateUI=None):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
        
        #self.UpdateUI = UpdateUI
        self.InitUI()

    def InitUI(self):
        self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
        self.BoxSizer1Init()

        self.SetSizer( self.bSizer1 )
        self.Layout()
        
        self.Centre( wx.BOTH )
        
    def staticTextInit(self,name):
        self.m_staticText = wx.StaticText(self, wx.ID_ANY, name, wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText.Wrap( -1 )
        return self.m_staticText

    def textCtrlInit(self):
        self.m_textCtrl =  wx.TextCtrl(self,wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        return self.m_textCtrl

    def BoxSizer1Init(self):
        self.m_staticText1 = self.staticTextInit(DEFAULT_REGISTER_LIST[0])
        self.m_staticText2 = self.staticTextInit(DEFAULT_REGISTER_LIST[1])
        self.m_staticText3 = self.staticTextInit(DEFAULT_REGISTER_LIST[2])
        self.m_textCtrl1   = self.textCtrlInit()
        self.m_textCtrl2   = self.textCtrlInit()
        self.m_textCtrl3   = self.textCtrlInit()

        self.bSizer1 = wx.BoxSizer( wx.VERTICAL )
        self.bSizer1.Add( self.m_staticText1, 0, wx.ALL, 5 )
        self.bSizer1.Add( self.m_textCtrl1, 0, wx.ALL, 5 )
        self.bSizer1.Add( self.m_staticText2, 0, wx.ALL, 5 )
        self.bSizer1.Add( self.m_textCtrl2, 0, wx.ALL, 5 )
        self.bSizer1.Add( self.m_staticText3, 0, wx.ALL, 5 )
        self.bSizer1.Add( self.m_textCtrl3, 0, wx.ALL, 5 )
        
    def __del__( self ):
        pass

重构后代码调试:


image.png

重构前后代码对比可以清楚看出,重构GUI界面代码带来的好处。

你可能感兴趣的:(使用wxFormBuilder实现用户注册功能---界面部分代码重构)