- 在开发一些PC端软件、小工具时,时常要用到一个简易的登录界面,完成对内部软件的保护,在这里,我给大家提供一个简易的登录界面demo,已经实现登录、注册、密码校验等功能,并添加了背景图
,具体效果如下:

- 在这里输入输入账号密码(已注册),即可登录成功,效果如下

- 还有许多功能,如注册、登录密码错误等功能就不一一展示,大家可以将代码拷贝下来后自行验证,具体代码如下:
import tkinter
import pickle
from tkinter import messagebox
import time
from Tk_Process import *
class Login(object):
def __init__(self):
self.root = tkinter.Tk()
self.root.title("登录系统V1.0")
self.root.geometry('300x250')
try:
self.canvas = tkinter.Canvas(self.root, height=400, width=700,borderwidth=2)
self.image_file = tkinter.PhotoImage(file="test.gif")
self.image = self.canvas.create_image(0, 0, anchor='nw', image=self.image_file)
self.canvas.pack(side='top')
except:
print('无图片')
self.var_usr_name = tkinter.StringVar()
self.var_usr_pwd = tkinter.StringVar()
self.label_account = tkinter.Label(self.root, text='账户', font=('宋体', 11), width=4, borderwidth=2)
self.label_password = tkinter.Label(self.root, text='密码', font=('宋体', 11), width=4, borderwidth=2)
self.input_account = tkinter.Entry(self.root, width=20, textvariable=self.var_usr_name, font=('宋体', 11), borderwidth=2)
self.input_password = tkinter.Entry(self.root, show='*', width=20, textvariable=self.var_usr_pwd,font=('宋体', 11), borderwidth=2)
self.login_button = tkinter.Button(self.root, command=self.usr_login, text="登录", width=4, font=('宋体', 11), borderwidth=2)
self.siginUp_button = tkinter.Button(self.root, command=self.usr_sign_up, text="注册", width=4, font=('宋体', 11), borderwidth=2)
def gui_arrang(self):
self.label_account.place(x=35, y=70)
self.label_password.place(x=35, y=125)
self.input_account.place(x=95, y=70)
self.input_password.place(x=95, y=125)
self.login_button.place(x=95, y=180)
self.siginUp_button.place(x=190, y=180)
def usr_login(self):
usr_name = self.var_usr_name.get()
usr_pwd = self.var_usr_pwd.get()
try:
with open('usrs_info', 'rb') as usr_file:
usrs_info = pickle.load(usr_file)
except FileNotFoundError:
with open('usrs_info', 'wb') as usr_file:
usrs_info = {'admin': 'admin'}
pickle.dump(usrs_info, usr_file)
if usr_name in usrs_info:
if usr_pwd == usrs_info[usr_name]:
tkinter.messagebox.showinfo(title='欢迎', message='欢迎使用!')
else:
tkinter.messagebox.showinfo(message='密码错误,请重试!')
else:
is_sign_up = tkinter.messagebox.askyesno('欢迎', '您还没有注册,请前往注册!')
if is_sign_up:
self.usr_sign_up()
def usr_sign_up(self):
def sign_to_Mofan_Python():
np = new_pwd.get()
npf = new_pwd_confirm.get()
nn = new_name.get()
with open('usrs_info', 'rb') as usr_file:
exist_usr_info = pickle.load(usr_file)
print("exist_usr_info:",exist_usr_info)
if len(nn) != 11:
tkinter.messagebox.showerror('错误', '账户长度有误!')
elif np != npf:
tkinter.messagebox.showerror('错误', '两次密码不一致!')
elif nn in exist_usr_info:
tkinter.messagebox.showerror('错误', '该用户已注册!')
else:
exist_usr_info[nn] = np
with open('usrs_info', 'wb') as usr_file:
pickle.dump(exist_usr_info, usr_file)
tkinter.messagebox.showinfo('欢迎', '注册成功!')
window_sign_up.destroy()
window_sign_up = tkinter.Toplevel(self.root)
window_sign_up.geometry('280x170')
window_sign_up.title('注册窗口')
new_name = tkinter.StringVar()
tkinter.Label(window_sign_up, text='账号:').place(x=20, y=10)
entry_new_name = tkinter.Entry(window_sign_up, textvariable=new_name)
entry_new_name.place(x=100, y=10)
new_pwd = tkinter.StringVar()
tkinter.Label(window_sign_up, text='密码:').place(x=20, y=50)
entry_new_pwd = tkinter.Entry(window_sign_up, textvariable=new_pwd, show='*')
entry_new_pwd.place(x=100, y=50)
new_pwd_confirm = tkinter.StringVar()
tkinter.Label(window_sign_up, text='验证密码:').place(x=20, y=90)
entry_comfirm_sign_up = tkinter.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*')
entry_comfirm_sign_up.place(x=100, y=90)
print("window_sign_up:",window_sign_up)
btn_comfirm_sign_up = tkinter.Button(window_sign_up, text='注册', command=sign_to_Mofan_Python)
btn_comfirm_sign_up.place(x=130, y=130)
def main():
L = Login()
L.gui_arrang()
tkinter.mainloop()
if __name__ == '__main__':
main()