自己开发的wxPython登陆组件

在我们做应用时,绝大多数CS架构的系统都需要一个Login窗体,虽然写一个登陆窗体并不难,但是在面向对象大行其道的今天,模块的复用是提高开发效率的有效途径,一个好的coder也会开发一些通用的组建,提供给大家调用,组件往往与开发者的经验的设计理念有关,优秀coder开发的组建,许多项目和场景都可以拿来直接使用,spring、wxPython以及国内的云风开发的游戏引擎,很多公司都广泛的采用,其实很多优秀的Coder都能设计出好的组建,我也相信他们设计了很多好的组建,但是种种原因,导致其开发组建只在本公司和本小组内使用,大大削减了其效益,废话不多说,我这里抛砖引玉,提供一个wxPython的 Loggin 组建,如若有误,欢迎指正!

#coding:GBK
'''
Created on 2012-4-18

@author: CaoZhongPing
'''

TTIEL="登陆"
USER="用户"
PWD="密码"
USR_LEN=5
PWD_LEN=6
BUTTON_OK="确认"
BUTTON_CANCLE="取消"
TOP_TIP="请输入用户名和密码 "
DFAULT_USR="请输入5位用户名"
DEFAULT_PWD="123456"


import wx

class LoginDialog(wx.Dialog):
    '''
    登陆对话窗体,请勿直接调用ShowModal() ,调用Show()
    '''

    def __init__(self,parent=None,title=TTIEL,size=(300,220),
                 userTxtLen=USR_LEN,pwdTxtLen=PWD_LEN):
        wx.Dialog.__init__(self,parent,-1,title,size=size,
                           style=wx.DEFAULT_DIALOG_STYLE)
        self.txtCtrMap={}           #缓存输入框
        self.okBtn=None
        self.pwdLen = pwdTxtLen
        self.usrLen = userTxtLen
        self.CreateCompment()
        
    #构建label项    
    def _dataTxtLabel(self):
        return ((USER,0,self._OnUserTxtInput,DFAULT_USR),
                (PWD,wx.TE_PASSWORD,self._OnPwdInput,DEFAULT_PWD))   
    
    #构建button项
    def _dataWithButton(self):
        return((wx.ID_OK,BUTTON_OK),(wx.ID_CANCEL,BUTTON_CANCLE))
    

    #构建TextCtrl项
    def _CreateTxtLabel(self, sizer, eachLabel, eachStyle, eachHandler,dvalue):
        box = wx.BoxSizer(wx.HORIZONTAL)
        label = wx.StaticText(self, -1, eachLabel)
        box.Add(label, 0, wx.ALIGN_CENTER| wx.ALL, 5)
        text = wx.TextCtrl(self, -1, dvalue, size = (150, -1), style = eachStyle)
        text.Bind(wx.EVT_TEXT, eachHandler)
        box.Add(text,1, wx.ALIGN_CENTER_HORIZONTAL| wx.ALL,5)
        sizer.Add(box, 0, wx.ALIGN_CENTER| wx.ALL, 5)
        self.txtCtrMap[eachLabel]=text
       

    def _CreateButton(self, btnSizer, eachID, eachLabel):
        btn = wx.Button(self,eachID,eachLabel)
        if eachID==wx.ID_OK:
            btn.SetDefault()
            self.okBtn=btn
            btn.Disable()
        btnSizer.AddButton(btn)    
    
    #根据数据项构建组建
    def CreateCompment(self):
        sizer = wx.BoxSizer(wx.VERTICAL)
        topTip = wx.StaticText(self,-1,TOP_TIP)
        sizer.Add(topTip,0,wx.ALIGN_CENTER|wx.ALL,5)
        for eachLabel,eachStyle,eachHandler,dvalue in self._dataTxtLabel():
            self._CreateTxtLabel(sizer,eachLabel,eachStyle,eachHandler,dvalue)
        btnSizer = wx.StdDialogButtonSizer()
        for eachID,eachLabel in self._dataWithButton():
            self._CreateButton(btnSizer,eachID,eachLabel)
        btnSizer.Realize()
        sizer.Add(btnSizer,1,wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)   
        self.SetSizer(sizer)
        
        
    def _OnUserTxtInput(self,event):
        self._EnableOrDisableOkBtn()
                
    def _OnPwdInput(self,event):
        self._EnableOrDisableOkBtn()
             
    #确保两个框都有输入
    def _EnableOrDisableOkBtn(self):
        self.okBtn.Enable()
        usrStr = self.txtCtrMap[USER].GetValue()
        pwdStr = self.txtCtrMap[PWD].GetValue()
        if len(usrStr)!= self.usrLen or len(pwdStr)!=self.pwdLen:
            self.okBtn.Disable()

   
    #调用该函数将显示窗体并确定后可返回结果       
    def Show(self):
        res = self.ShowModal()    
        if res == wx.ID_OK:
            return (self.txtCtrMap[USER].GetValue(),self.txtCtrMap[PWD].GetValue())
        
if __name__ =='__main__':
    app = wx.PySimpleApp()
    log = LoginDialog()
    res =log.Show()
    print res
    log.Destroy()
    app.MainLoop()
        


以下是XP下的效果图:

1. 未输入时


2 长度不对 (user 5 ,pwd 6)

3 输入长度符合时 确定按钮可用


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值