使用wxFormBuilder實現(xiàn)用戶注冊功能---界面部分代碼重構(gòu)

這部分內(nèi)容主要介紹如何調(diào)試自動生成的python代碼,在windows系統(tǒng)上顯示出來,同時使代碼簡潔,易于維護(hù)。

1、 拷貝noname.py代碼到myWin.py

image.png

2、新建mainWin.py文件,用于在windows python3調(diào)試環(huán)境下,顯示設(shè)計的GUI界面。

import wx
\# 導(dǎo)入mywin.py中內(nèi)容
import mywin

\# 創(chuàng)建mainWin類并傳入mywin.MyFrame1
class mainWin(mywin.MyFrame1):

   \# 實現(xiàn)Button控件的響應(yīng)函數(shù)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里面調(diào)試效果如下:

image.png

3、根據(jù)python UI代碼重構(gòu)原則,對myWin.py代碼進(jìn)行重構(gòu)

重構(gòu)前:

# -*- 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"確認(rèn)密碼", 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

重構(gòu)原則:
不要重復(fù):
你應(yīng)該避免有多個相同功能的段。
當(dāng)這個功能需要改變時,這維護(hù)起來很頭疼。

一次做一件事情:
一個方法應(yīng)該并且只做一件事情。
各自的事件應(yīng)該在各自的方法中。
方法應(yīng)該保持短小。

嵌套的層數(shù)要少:
盡量使嵌套代碼不多于2或3層。
對于一個單獨的方法,深的嵌套也是一個好的選擇。

避免字面意義上的字符串和數(shù)字:
字面意義上的字符串和數(shù)字應(yīng)使其出現(xiàn)在代碼中的次數(shù)最小化。
一個好的方法是,把它們從你的代碼的主要部分中分離出來,并存儲于一個列表或字典中。

思考:
既然是調(diào)試注冊界面,后面必定要增加注冊成功后跳轉(zhuǎn)到別的界面的場景(如多Frame場景),所以這里將class MyFrame1改成class RegisterFrame。還要增加一個guiManager.py文件,用于管理注冊成功后的界面跳轉(zhuǎn)功能。下篇文章介紹多界面跳轉(zhuǎn)。這里只介紹重構(gòu)wxFormBuilder自動生成python界面代碼。

myWin.py重構(gòu)后:

# -*- 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"確認(rèn)密碼"]
###########################################################################
## 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

重構(gòu)后代碼調(diào)試:


image.png

重構(gòu)前后代碼對比可以清楚看出,重構(gòu)GUI界面代碼帶來的好處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容