这段代码使用tkinter
库创建了一个简单的用户登录界面和注册界面,运行后会弹出一个图形界面,用户可以在界面中输入用户名和密码来登录或注册。
以下是代码中各部分的主要功能解释:
- 创建主窗口
root
并设置窗口标题、大小和位置。 - 创建
Canvas
组件用于显示图片,通过ImageTk.PhotoImage
将图片转换为可在界面显示的格式。 - 创建标签和输入框,用于用户输入用户名和密码。
- 定义
usr_log_in
函数,用于验证用户输入的用户名和密码是否正确,同时支持用户注册。 - 定义
usr_sign_up
函数,用于弹出注册窗口,用户可以在该窗口输入用户名和密码来注册。 - 创建按钮,分别用于登录、注册和清空输入框。
- 运行主循环
root.mainloop()
以启动图形界面的事件循环。
需要注意的是,代码中的图片路径和文件路径需要根据你的实际情况进行调整,另外,代码中没有进行密码加密存储,实际应用中应该考虑加密存储用户的密码。同时,图形界面的美观性和布局可以根据需求进行进一步的调整。
import tkinter as tk
import tkinter.messagebox
import pickle
from PIL import Image, ImageTk
import urllib.request
root = tk.Tk()
root.title('欢迎进入云学习平台')
root.geometry('600x400+300+150')
canvas = tk.Canvas(root, height=400, width=600)
img = Image.open('E:p/ledo.png')
img1 = img.resize((600, 400), Image.ANTIALIAS)
img_root = ImageTk.PhotoImage(img1)
canvas.create_image(300, 200, image=img_root)
canvas.pack(side='top')
label1 = tk.Label(root, text="用户名:", bg="white", font=('宋体', 12), fg='black').place(x=300, y=150)
label2 = tk.Label(root, text="密 码:", bg="white", font=('宋体', 12), fg='black').place(x=300, y=200)
entry_name = tk.Entry(root)
entry_name.place(x=400, y=150)
entry_pwd = tk.Entry(root)
entry_pwd.place(x=400, y=200)
entry_pwd['show'] = '*'
def usr_log_in():
name = entry_name.get()
pwd = entry_pwd.get()
try:
with open('E:p\\usr_info.pickle', 'rb') as usr_file:
usrs_info = pickle.load(usr_file)
except FileNotFoundError:
with open('E:p\\usr_info.pickle', 'wb')as usr_file:
usrs_info = {'admin': 'admin'}
pickle.dump(usrs_info, usr_file)
if name in usrs_info:
if pwd == usrs_info[name]:
tk.messagebox.showinfo(title='welcome', message='欢迎您:'+name)
else:
tk.messagebox.showerror(message='密码错误')
elif name == '' or pwd == '':
tk.messagebox.showerror(message='用户名或密码为空')
else:
is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')
if is_signup:
usr_sign_up()
def usr_sign_up():
def signtowcg():
nn = entry3.get()
np = entry4.get()
npf= entry5.get()
try:
with open('E:p\\usr_info.pickle', 'rb')as usr_file:
exist_usr_info = pickle.load(usr_file)
except FileNotFoundError:
exist_usr_info = {}
if nn in exist_usr_info:
tk.messagebox.showerror('错误', '用户名已存在')
elif np == '' or nn == '':
tk.messagebox.showerror('错误', '用户名或密码为空')
elif np != npf:
tk.messagebox.showerror('错误', '密码前后不一致')
else:
exist_usr_info[nn] = np
with open('E:p\\usr_info.pickle', 'wb')as usr_file:
pickle.dump(exist_usr_info, usr_file)
tk.messagebox.showinfo('欢迎', '注册成功')
window_sign_up.destroy()
window_sign_up=tk.Toplevel(root)
window_sign_up.geometry('350x200+420+280')
window_sign_up.title('注册')
label3=tk.Label(window_sign_up,text='用户名:')
label3.place(x=20,y=15)
entry3 = tk.Entry(window_sign_up)
entry3.place(x=140,y=15)
label4 = tk.Label(window_sign_up, text='请输入密码:')
label4.place(x=20, y=55)
entry4 = tk.Entry(window_sign_up)
entry4.place(x=140, y=55)
entry4['show']='*'
label5= tk.Label(window_sign_up, text='请再次输入密码:')
label5.place(x=20, y=95)
entry5=tk.Entry(window_sign_up)
entry5.place(x=140, y=95)
entry5['show'] = '*'
button4 = tk.Button(window_sign_up, text='确认注册', command=signtowcg)
button4.place(x=140, y=140)
def delete():
entry_name.delete(0,'end')
entry_pwd.delete(0, 'end')
button1 = tk.Button(root, text='登录', font=('宋体', 12),fg='black', command=usr_log_in).place(x=300, y=270)
button2 = tk.Button(root, text='注册', font=('宋体', 12),fg='black', command=usr_sign_up).place(x=400, y=270)
button3 = tk.Button(root, text='退出', font=('宋体', 12),fg='black', command=delete).place(x=500, y=270)
root.mainloop()
评论前必须登录!
注册