【本期导读】使用wxPthon开发界面,完成登录模块
wxPthon是一个非常强大的界面制作模块,下载地址是 http://www.wxpython.org/。wxPython安装包中附送了大量实例代码,每个界面控件的使用方法都有介绍,同时还可以去查看在线api文档 http://www.wxpython.org/docs/api/wx-module.html,这个文档的风格很像javadoc,习惯了java api 文档的人一看就清楚,如果想系统地了解一下wyPython则可以下载官方推荐的《 wxPython in Action 》一书。
粗略浏览一下wyPtyhon Demo,便立即开始尝试编写ClinicOS的登录模块,首先确认一下界面表现力和功能:
界面元素:
1.一个登录窗体
2.帐号标签及文本框,密码标签及文本框
3.确定和取消按钮
功能:
1.单击『确定』按钮时能验证输入的帐号和密码是否正确,如果正确则显示Clinic主界面(TODO,暂时让它显示一个成功消息框),否则提示“帐号或密码错误”。
2.单击『取消』按钮退出登录模块
经过一番努力,终于把界面画好了,暂时丑了点,待以后给它美容。
登录.jpg
不过画这点界面很不方便,得有点耐心,特别是控件的位置要全手工地调坐标,这对于缺乏方向和位置感的我来说更是痛苦 ,想找一个可以做界面用的IDE for python,却始终没找到,没办法,只好将痛苦忍受到底。
以下是完整的代码:

 1#!/usr/bin/python
 2# -*- coding: UTF-8 -*-
 3# $Id: login.py 12 2006-04-11 03:20:48Z Administrator $
 4"""
 5登录模块
 6"""
 7import wx
 8import dbconnect,utils
 9
10class LoginFrame(wx.Frame):
11    """
12    登录界面
13    """
14    def __init__(self):
15        """
16        创建一个自定义的窗体
17        """
18        loginstyle=wx.DEFAULT_FRAME_STYLE^(wx.RESIZE_BORDER|
19                                           wx.MINIMIZE_BOX|
20                                           wx.MAXIMIZE_BOX|
21                                           wx.CLOSE_BOX)
22        wx.Frame.__init__(self,None,id=-1,title="登录",style=loginstyle,size=(400,300))
23
24        panel=wx.Panel(self)
25        
26        lblAccount=wx.StaticText(panel,label="帐    号:",pos=(100,100))
27        self.txtAccount=wx.TextCtrl(panel,size=(125,-1),pos=(160,100))
28        
29        lblPwd=wx.StaticText(panel,label="密    码:",pos=(100,150))
30        self.txtPwd=wx.TextCtrl(panel,size=(125,-1),pos=(160,150),style=wx.TE_PASSWORD)
31        
32        btnOK=wx.Button(panel,label="确定(&O)",pos=(150,200))
33        self.Bind(wx.EVT_BUTTON,self.OnClickOK,btnOK)
34        
35        btnQuit=wx.Button(panel,label="取消(&C)",pos=(240,200))        
36        self.Bind(wx.EVT_BUTTON,self.OnClickQuit,btnQuit)
37        self.Bind(wx.EVT_CLOSE,self.OnCloseWindow)
38    def MessageBox(self,description,title):
39        dlg = wx.MessageDialog(self,description,
40                       title,
41                       wx.OK | wx.ICON_INFORMATION
42                       #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION
43                       )
44        dlg.ShowModal()
45        dlg.Destroy()
46    def OnClickOK(self,event):
47        """
48        单击确定按钮响应事件
49        """
50        sql="""
51        select count(id) as count from d_operator
52        """
53        sql=sql+" where account='"+self.txtAccount.GetValue()+"'"+" and password='"+utils.encrypt(self.txtPwd.GetValue())+"'"
54
55        conn=dbconnect.SqliteConnection()
56        list=conn.execute(sql)
57        if int(list[0][0])==1:
58            self.MessageBox("登录成功","成功")
59        else:
60            self.MessageBox("帐号或密码错误,请重新输入!","登录")
61    def OnClickQuit(self,event):
62        """
63        单击取消按钮响应事件
64        """
65        self.Close(True)        
66    def OnCloseWindow(self,event):
67        self.Destroy()
68class LoginApp(wx.App):
69    """
70    登录模块
71    """
72    def OnInit(self):
73        frame=LoginFrame()
74        frame.Show()
75        return True
76
77if __name__=='__main__':
78    app=LoginApp()
79    app.MainLoop()
其中53行中使用的 utils.encrypt这个方法,是自己写的一个md5加密方法,这在python里非常简单,只需要3句:
1.导入md5和base64:import md5,base64
2.创建一个md5对象实例: md5.new("字符串").digest()
3.将生成的md5串做个base64转换:base64.b64encode(md5.new("字符串").digest()这个返回的就是加密字符串。

【下期提示】 逐步 深入学习 wxPython, 制作ClinicOS主界面