【本期导读】使用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
"""
7
import wx
8
import dbconnect,utils
9
10
class 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()
68
class LoginApp(wx.App):
69
"""
70
登录模块
71
"""
72
def OnInit(self):
73
frame=LoginFrame()
74
frame.Show()
75
return True
76
77
if __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主界面