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 # 单选框的value参数 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) content = json.dumps(users) with open("user.txt", "w", encoding="utf8") as file: file.write(content) self.canvas.destroy() app.show() def get_info(self): info = self.ent.get() self.ent.delete("0", END) if info != "": alist.append(info) content = json.dumps(users) with open("user.txt", "w", encoding="utf8") as file: file.write(content) 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) 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] = user_info 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(): # 登录验证 global app,alist name, password = app_login.get_input() user_name = users.get(name) if user_name != None and user_name["password"] == password: alist = users[name]["event"] 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()