【本期导读】使用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.单击『取消』按钮退出登录模块
经过一番努力,终于把界面画好了,暂时丑了点,待以后给它美容。
不过画这点界面很不方便,得有点耐心,特别是控件的位置要全手工地调坐标,这对于缺乏方向和位置感的我来说更是痛苦
,想找一个可以做界面用的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主界面