Tkinter 簡單使用者登入註冊程式
阿新 • • 發佈:2019-01-02
在完成python核心程式設計過程中,第七章第五題要求用Tkinter編寫一個簡單的GUI介面,完成簡單的使用者登入註冊。查詢的過程裡現有的程式碼無法滿足要求,收集資料完成了一個簡單的。可以作為類似題目的模板。
# encoding=utf-8
import time
import hashlib
from Tkinter import *
import tkMessageBox
import tkMessageBox,tkFileDialog
import platform
db = {}
#處理註冊
def newuser(name,pwd):
while True:
if db.has_key(name):
tkMessageBox.showinfo(title='失敗', message='already has this name')
continue
else:
break
m = hashlib.md5()
m.update(pwd)
# print m
# print m.hexdigest()
db[name] = [m.hexdigest(),time.strftime("%Y %m %d %H %M", time.localtime())]
tkMessageBox.showinfo(title='成功' , message='註冊成功')
#處理直接登入
def olduser(name,pwd):
m = hashlib.md5()
m.update(pwd)
# print m
pwd = m.hexdigest()
passwd = db[name][0]
if passwd == pwd:
tkMessageBox.showinfo(title='成功', message='welcome back'+name)
ti = time.strftime("%Y %m %d %H %M", time.localtime())
lis1 = ti.split(' ' )
lis2 = db[name][1].split(' ')
# print lis1
# print lis2
if lis1[0] == lis2[0]:
if lis1[1] == lis2[1]:
if lis1[2] == lis2[2]:
if int(lis1[3])-4<int(lis2[3]):
# print 'you alraedy logged in at %s' %db[name][1]
tkMessageBox.showinfo(title='成功', message='you already logged in at %s ' % db[name][1])
db[name][1] = ti
else:
tkMessageBox.showinfo(title='失敗', message='登入失敗')
#刪除使用者,返回一個提示框
def delete(name):
del db[name]
tkMessageBox.showinfo(title='成功', message='刪除:'+name)
#展示所有使用者,返回提示框
def showuser():
string1 = ''
for key in db:
string1 = string1+key
string1 = string1+' '+db[key][0]
string1 = string1+'\n'
tkMessageBox.showinfo(title='使用者資訊', message=string1)
#處理註冊視窗
def signin():
win1 = Toplevel()
l1 = Label(win1, text="註冊")
l1.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
l2 = Label(win1, text="姓名:")
l2.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
sheet_text1 = StringVar()
sheet1 = Entry(win1, textvariable=sheet_text1)
sheet1.pack()
l3 = Label(win1, text="密碼:")
l3.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
sheet_text2 = StringVar()
sheet2 = Entry(win1, textvariable=sheet_text2)
sheet2.pack()
def on_click1():
name = sheet_text1.get()
pwd = sheet_text2.get()
#呼叫處理新使用者視窗
newuser(name,pwd)
Button(win1, text="press", command=on_click1).pack()
#處理登入視窗
def login():
# win1 = Tk.winfo_toplevel(root)
#焦點繫結到當前視窗,否則無法獲取輸入
win1 = Toplevel()
l4 = Label(win1, text="登入")
l4.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
l5 = Label(win1, text="姓名:")
l5.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
sheet_text3 = StringVar()
sheet3 = Entry(win1, textvariable=sheet_text3)
sheet3.pack()
l6 = Label(win1, text="密碼:")
l6.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
sheet_text4 = StringVar()
sheet4 = Entry(win1, textvariable=sheet_text4)
sheet4.pack()
def on_click2():
name = sheet_text3.get()
pwd = sheet_text4.get()
olduser(name,pwd)
Button(win1, text="press", command=on_click2).pack()
#退出程式
def quit1():
root.quit()
#刪除使用者視窗
def deuser():
win1 = Toplevel()
l4 = Label(win1, text="登入")
l4.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
l5 = Label(win1, text="姓名:")
l5.pack() # 這裡的side可以賦值為LEFT RTGHT TOP BOTTOM
sheet_text3 = StringVar()
sheet3 = Entry(win1, textvariable=sheet_text3)
sheet3.pack()
def on_click5():
name = sheet_text3.get()
delete(name)
Button(win1, text="press", command=on_click5).pack()
if __name__ == '__main__':
root = Tk()
root.title('使用者登入視窗')
root.geometry('500x400')
#分別進入不同的視窗
Button(root, text="註冊", command=signin).pack()
Button(root, text="登入", command=login).pack()
Button(root, text="退出", command=quit1).pack()
Button(root, text="所有使用者", command=showuser).pack()
Button(root, text="刪除使用者", command=deuser).pack()
root.mainloop()