这是我在学习GUI的时候学到的一个小程序,个人觉得很不错,就分享出来,代码里只是进行了一些简单注释
首先关于这一部分 我就不在在代码里面改了
with open('./data.txt', 'r', encoding='utf-8') as fp:
我这里是直接在代码所在文件夹新建了一个存用户数据的txt文档,大家也可以自动生成
其他的就不多说了
# usr/bin/env python
# -*- coding:utf-8 -*-
# 使用相关组件
from tkinter import messagebox, Toplevel
import tkinter as tk
# 初始化窗口
root = tk.Tk()
root.title('登录')
# 设置窗口大小并且居中
width = 280
height = 300
screen_width, screen_height = root.maxsize()
al_root = '%dx%d+%d+%d' % (width, height, (screen_width-width)/2, (screen_height-height)/2)
root.geometry(al_root)
# 设置是否可以缩放
root.resizable(width=False, height=False)
# 设置标签
user_name_label = tk.Label(root, text='账号:', font=('FangSong', 14))
user_name_label.place(x=30, y=30) # place放置方法 直接通过x,y定位 grid放置方法 网格行列定位
user_pwd_label = tk.Label(root, text='密码:', font=('FangSong', 14))
user_pwd_label.place(x=30, y=50)
# 读取文件
def get_data():
data = {}
with open('./data.txt', 'r', encoding='utf-8') as fp:
lines = fp.readlines()
for line in lines:
line_list = line.strip().split(':')
data[line_list[0]] = line_list[1]
return data
# 定义一个登录的方法
def user_lo():
name = user_name_text.get()
pwd = user_pwd_text.get()
user_data = get_data()
if name != '' and pwd != '':
if name in user_data.keys():
if pwd == user_data[name]:
messagebox.showinfo(title='正确', message='登录成功,欢迎'+name+'的到来')
# print('登录成功,欢迎'+name+'的到来')
else:
messagebox.showerror(title='错误', message='您输入的用户密码输入错误')
# print('您输入的用户密码输入错误')
else:
messagebox.showerror(title='错误', message='您输入的用户名不存在')
# print('您输入的用户名不存在')
else:
messagebox.showerror(title='错误', message='输入的账号和密码不能为空')
# print('输入的账号和密码不能为空')
#
def pop_root():
top = Toplevel()
top.title('注册')
top.geometry('280x320+500+200') # 这里直接手动放置位置了
tk.Label(top, text='账号', font=('FangSong', 14), width=10).grid(row=1, column=0)
u_name = tk.StringVar()
u_name_entry = tk.Entry(top, textvariable=u_name, font=('FangSong', 14), width=15)
u_name_entry.grid(row=1, column=1)
tk.Label(top, text='密码', font=('FangSong', 14), width=10).grid(row=2, column=0)
u_pwd = tk.StringVar()
u_pwd_entry = tk.Entry(top, textvariable=u_pwd, font=('FangSong', 14), width=15)
u_pwd_entry.grid(row=2, column=1)
tk.Label(top, text='确认密码', font=('FangSong', 14), width=10).grid(row=3, column=0)
u_ppwd = tk.StringVar()
u_ppwd_entry = tk.Entry(top, textvariable=u_ppwd, font=('FangSong', 14), width=15)
u_ppwd_entry.grid(row=3, column=1)
def res_set():
name = u_name.get()
pwd = u_pwd.get()
ppwd = u_ppwd.get()
if pwd == ppwd:
with open('./data.txt', 'a', encoding='utf-8') as f:
f.writelines(name + ':' + pwd + '\n')
f.flush()
f.close()
messagebox.showinfo(title='正确', message='注册成功') # messagebox 设置弹窗
top.destroy()
else:
messagebox.showerror('错误', message='两次密码输入不一致')
tk.Button(top, text='注册', font=('FangSong', 14), width=9, command=res_set).grid(row=4, columnspan=2, pady=20)
# 账号密码输入框 实例化StringVar对象 set方法键入初始值 Entry方法让用户进行键盘输入
user_name_text = tk.StringVar()
user_name_text.set("输入账号")
user_name_entry = tk.Entry(root, textvariable=user_name_text, font=('FangSong', 14),
width=15)
user_name_entry.place(x=80, y=30)
user_pwd_text = tk.StringVar()
user_pwd_text.set("输入密码")
user_pwd_entry = tk.Entry(root, textvariable=user_pwd_text, font=('FangSong', 14),
width=15)
user_pwd_entry.place(x=80, y=50)
# 设置 登录 注册按钮
user_login = tk.Button(root, text='登录', font=('FangSong', 14), command=user_lo)
user_login.place(x=30, y=120)
user_login_res = tk.Button(root, text='注册', font=('FangSong', 14), command=pop_root)
user_login_res.place(x=180, y=120)
root.mainloop()
效果图
代码中还有许多问题,如注册是连续注册同一个账户会出现什么问题...大家可以试着完善一下