tkinter 设置简单登录窗口

这是我在学习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()

效果图

 

 

 代码中还有许多问题,如注册是连续注册同一个账户会出现什么问题...大家可以试着完善一下

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿木wh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值