import tkinter
from tkinter import *
from tkinter import messagebox
import json

alist = ["星期六下午打篮球", "星期天下午和小美一起看电影",
         "12月18日给蒂法过生日", "12.24送妈妈圣诞礼物"]

class Note():  # 便签、笔记
    def __init__(self):
        self.root = tkinter.Tk()
        self.root.geometry('300x340+1000+200')
        self.root.title("我的便签-待办事项")
        self.root.resizable(width=False, height=False)  
        self.bg_img = tkinter.PhotoImage(file="bg.png")
        self.box = PhotoImage(file="box.png")
    def show(self):  # 布置窗口界面
        # 画布
        self.canvas = tkinter.Canvas(self.root, width=300, height=340)
        self.canvas.create_image(0, 0, image=self.bg_img, anchor=NW)
        self.canvas.place(x=0, y=0)
        # 输入框
        self.ent = tkinter.Entry(self.root, show=None,font=('宋体', 13),
                        bg="snow", width=25)
        self.ent.place(x=10, y=310)
        # 按钮
        self.but = tkinter.Button(self.root,text='添加',font=('宋体', 12),
                        bg="lightblue", width=5, command=self.get_info)
        self.but.place(x=240, y=305)
        # 展示所有的文字
        self.y = 20
        self.val = 0
        self.v = IntVar()
        for info in alist:
            self.canvas.create_text(40, self.y, text=info,
                        font=("宋体", 11), anchor=W, fill='#FF9900')
            self.select = tkinter.Radiobutton(self.canvas,image=self.box,
                        value=self.val,variable=self.v,width=25,height=15,
                        borderwidth=0,command=self.remove)
            self.select.place(x=-20,y=self.y-10)
            self.val +=1
            self.y += 30

    def remove(self):
        num = self.v.get()
        alist.pop(num)
        self.canvas.destroy()
        app.show()

    def get_info(self):
        info = self.ent.get()
        self.ent.delete("0", END)
        if info != "":
            alist.append(info)
            self.canvas.create_text(40,self.y,text=info,font=("宋体",11),
                         anchor=W, fill='#FF9900')
            self.select = tkinter.Radiobutton(self.canvas,image=self.box,
                        value=self.val,variable=self.v,width=25,height=15,
                        borderwidth=0,command=self.remove)
            self.select.place(x=-20,y=self.y-10)
            self.val +=1
            self.y += 30

with open("user.txt", "r", encoding="utf-8") as f:
    info = f.read()
    users = json.loads(info)

def login_to_reg():    # 登录界面转注册界面
    app_login.root.destroy()
    global app_reg
    app_reg = My_register()
    app_reg.show()

def reg_to_login():   # 注册界面转登录界面
    app_reg.root.destroy()
    global app_login
    app_login = My_login()
    app_login.show()

def register():     # 注册验证
    name,password1,password2 = app_reg.get_input()
    if name =="" or password2 == "" or password1=="":
        messagebox.showwarning("警告", "请填写完整的注册资料")
    elif name in users:
        messagebox.showwarning("错误", "用户名已经存在!")
    elif password1 != password2:
        messagebox.showwarning("错误", "两次密码不一致!")
    else:
        user_info = {}
        user_info["password"] = password1
        user_info["event"] = ["提示1:可以从输入框添加新任务",
                              "提示2:点击前面选择框,表示任务完成"]

        users[name] = password1
        content = json.dumps(users)
        with open("user.txt", "w", encoding="utf-8") as file:    # "w"每次写入都覆盖原来的内容
            file.write(content)
        # 注册成功,跳往登陆界面
        messagebox.showinfo("成功", "注册成功")
        reg_to_login()

def login():        # 登录验证
    name, password = app_login.get_input()
    pwd = users.get(name)
    global app
    if pwd == password:
        #messagebox.showinfo("成功", "登录成功")
        app_login.root.destroy()
        app = Note()
        app.show()
        app.root.mainloop()

    else:
        messagebox.showwarning("错误", "用户名或密码错误!")

class My_login():       # 登录窗口
    def __init__(self):
        self.root = tkinter.Tk()
        self.root.title("登录窗口")
        self.root.geometry('400x300+500+300')
        self.root.resizable(width=False, height=False)  # True可以拉伸,False不能拉伸

    def show(self):         # 登录界面的所有控件
        # Label文本标签,界面提示信息
        l = tkinter.Label(self.root, text='您好!请登录', bg='green', 
            font=('宋体', 15), width=40, height=2)
        l.place(x=0, y=0)
        l = tkinter.Label(self.root, text='用户名:', font=("宋体", 12),
            fg="black")
        l.place(x=50, y=80)
        l = tkinter.Label(self.root, text='密  码:', font=("宋体", 12), 
            fg="black")
        l.place(x=50, y=140)

        # Entry单行文本输入框:用户名、密码
        self.e1 = tkinter.Entry(self.root, show=None, font=('宋体', 14), 
                  bg="light grey", width=18)  # 显示成明文形式
        self.e2 = tkinter.Entry(self.root, show='*', font=('宋体', 14),
                  width=18)  # 显示成密文形式
        self.e1.place(x=120, y=80)
        self.e2.place(x=120, y=140)

        # 登录、注册按钮
        button1 = tkinter.Button(self.root, text='登录', bg="lightblue",
                  fg="black", width=15, command=login)
        button1.place(x=60, y=220)
        button2 = tkinter.Button(self.root, text='注册', bg="lightgreen",
                  fg="black", width=15, command=login_to_reg)
        button2.place(x=230, y=220)
        self.root.mainloop()    # 进入消息循环,监听事件

    def get_input(self):      # 获取输入的用户名、密码
        self.name = self.e1.get()
        self.password = self.e2.get()
        return self.name, self.password

class My_register():        # 注册窗口
    def __init__(self):
        self.root = tkinter.Tk()
        self.root.title("注册窗口")
        self.root.geometry('400x320+500+300')
        self.root.resizable(width=False, height=False)  # True可以拉伸,False不能拉伸
   
    def show(self):     # 注册界面的所有控件
        # 用户名、密码、确认密码输入框
        self.e1 = tkinter.Entry(self.root, show=None, font=('宋体', 14), 
                  bg="light grey", width=18)  # 显示成明文形式
        self.e1.place(x=140, y=80)
        self.e2 = tkinter.Entry(self.root, show='*', font=('宋体', 14),
                  width=18)
        self.e2.place(x=140, y=140)
        self.e3 = tkinter.Entry(self.root, show='*', font=('宋体', 14),
                  width=18)
        self.e3.place(x=140, y=200)

        # Label文本标签,窗口界面文字:用户名、密码、确认密码
        lab = tkinter.Label(self.root, text='您好!请填写注册信息',
              font=('宋体', 15),fg="black", width=40, height=2, bg="green")
        lab.place(x=0, y=0)
        lab1 = tkinter.Label(self.root, text='用户名:', font=("宋体", 12),
               fg="black")
        lab1.place(x=60, y=80)
        lab2 = tkinter.Label(self.root, text='密  码:', font=("宋体", 12),
               fg="black")
        lab2.place(x=60, y=140)
        lab3 = tkinter.Label(self.root, text='确认密码:', font=("宋体", 12),
               fg="black")
        lab3.place(x=50, y=200)

        # 注册界面的提交、取消按钮
        button1 = tkinter.Button(self.root, text='提交', bg="lightblue",
                  width=15,command=register)
        button1.place(x=230, y=250)
        button2 = tkinter.Button(self.root, text='取消', bg="lightgreen",
                  width=15, command=reg_to_login)
        button2.place(x=80, y=250)
        # 进入消息循环
        self.root.mainloop()

    def get_input(self):         # 获取提交的注册信息
        self.name = self.e1.get()
        self.password1 = self.e2.get()
        self.password2 = self.e3.get()
        return self.name, self.password1, self.password2

app_login = My_login()
app_login.show()