這部分內(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界面代碼帶來的好處。