【本期導(dǎo)讀】使用wxPthon開發(fā)界面,完成登錄模塊
wxPthon是一個(gè)非常強(qiáng)大的界面制作模塊,下載地址是
http://www.wxpython.org/。wxPython安裝包中附送了大量實(shí)例代碼,每個(gè)界面控件的使用方法都有介紹,同時(shí)還可以去查看在線api文檔
http://www.wxpython.org/docs/api/wx-module.html,這個(gè)文檔的風(fēng)格很像javadoc,習(xí)慣了java api 文檔的人一看就清楚,如果想系統(tǒng)地了解一下wyPython則可以下載官方推薦的《
wxPython in Action 》一書。
粗略瀏覽一下wyPtyhon Demo,便立即開始嘗試編寫ClinicOS的登錄模塊,首先確認(rèn)一下界面表現(xiàn)力和功能:
界面元素:
1.一個(gè)登錄窗體
2.帳號(hào)標(biāo)簽及文本框,密碼標(biāo)簽及文本框
3.確定和取消按鈕
功能:
1.單擊『確定』按鈕時(shí)能驗(yàn)證輸入的帳號(hào)和密碼是否正確,如果正確則顯示Clinic主界面(TODO,暫時(shí)讓它顯示一個(gè)成功消息框),否則提示“帳號(hào)或密碼錯(cuò)誤”。
2.單擊『取消』按鈕退出登錄模塊
經(jīng)過一番努力,終于把界面畫好了,暫時(shí)丑了點(diǎn),待以后給它美容。

不過畫這點(diǎn)界面很不方便,得有點(diǎn)耐心,特別是控件的位置要全手工地調(diào)坐標(biāo),這對(duì)于缺乏方向和位置感的我來說更是痛苦

,想找一個(gè)可以做界面用的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
????????創(chuàng)建一個(gè)自定義的窗體
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="帳????號(hào):",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
????????單擊確定按鈕響應(yīng)事件
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("帳號(hào)或密碼錯(cuò)誤,請(qǐng)重新輸入!","登錄")
61
????def?OnClickQuit(self,event):
62
????????"""
63
????????單擊取消按鈕響應(yīng)事件
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這個(gè)方法,是自己寫的一個(gè)md5加密方法,這在python里非常簡(jiǎn)單,只需要3句:
1.導(dǎo)入md5和base64:import md5,base64
2.創(chuàng)建一個(gè)md5對(duì)象實(shí)例: md5.new("字符串").digest()
3.將生成的md5串做個(gè)base64轉(zhuǎn)換:base64.b64encode(md5.new("字符串").digest()這個(gè)返回的就是加密字符串。
【下期提示】逐步深入學(xué)習(xí)wxPython, 制作ClinicOS主界面