美文网首页程序员python GUI开发
使用wxFormBuilder实现用户注册功能---界面部分代码

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

作者: 小桥流水啦啦啦 | 来源:发表于2019-08-14 17:27 被阅读3次

    这部分内容主要介绍如何调试自动生成的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实现用户注册功能---界面部分代码

        本文链接:https://www.haomeiwen.com/subject/tefnjctx.html