用python代码写,使用tkinter实现界面UI设计,用文件保存数据,有登录和注册功能,以及数据的增删改查的衣物管理

时间: 2024-03-15 12:44:04 浏览: 21
好的,下面是一个简单的代码示例,实现了使用Tkinter实现UI界面设计,使用文件保存数据,包括登录和注册功能,以及数据的增删改查的衣物管理。 ```python import tkinter as tk import tkinter.messagebox as msgbox import json # 定义文件名和字段名 filename = "clothes.json" fields = ["name", "type", "color", "size", "quantity"] # 定义窗口类 class ClothesManager: def __init__(self, master): self.master = master self.master.title("衣物管理系统") self.master.geometry("400x300") # 创建控件 self.username_label = tk.Label(self.master, text="用户名:") self.username_label.grid(row=0, column=0, sticky=tk.W) self.username_entry = tk.Entry(self.master) self.username_entry.grid(row=0, column=1) self.password_label = tk.Label(self.master, text="密码:") self.password_label.grid(row=1, column=0, sticky=tk.W) self.password_entry = tk.Entry(self.master, show="*") self.password_entry.grid(row=1, column=1) self.login_btn = tk.Button(self.master, text="登录", command=self.login) self.login_btn.grid(row=2, column=0) self.register_btn = tk.Button(self.master, text="注册", command=self.register) self.register_btn.grid(row=2, column=1) self.clothes_listbox = tk.Listbox(self.master) self.clothes_listbox.grid(row=3, column=0, columnspan=2) self.add_btn = tk.Button(self.master, text="添加", command=self.add_clothes) self.add_btn.grid(row=4, column=0) self.delete_btn = tk.Button(self.master, text="删除", command=self.delete_clothes) self.delete_btn.grid(row=4, column=1) self.update_btn = tk.Button(self.master, text="更新", command=self.update_clothes) self.update_btn.grid(row=5, column=0) self.search_btn = tk.Button(self.master, text="查询", command=self.search_clothes) self.search_btn.grid(row=5, column=1) # 初始化数据 self.load_data() # 登录方法 def login(self): username = self.username_entry.get() password = self.password_entry.get() # 从文件中读取用户信息 with open(filename, "r") as f: users = json.load(f) # 验证用户名和密码是否正确 if username in users and users[username] == password: msgbox.showinfo("提示", "登录成功") else: msgbox.showerror("错误", "用户名或密码错误") # 注册方法 def register(self): username = self.username_entry.get() password = self.password_entry.get() # 从文件中读取用户信息 try: with open(filename, "r") as f: users = json.load(f) except: users = {} # 注册用户 if username in users: msgbox.showerror("错误", "用户名已存在") else: users[username] = password with open(filename, "w") as f: json.dump(users, f) msgbox.showinfo("提示", "注册成功") # 加载数据方法 def load_data(self): try: with open(filename, "r") as f: clothes = json.load(f) except: clothes = {} # 将数据显示在列表框中 self.clothes_listbox.delete(0, tk.END) for name, info in clothes.items(): self.clothes_listbox.insert(tk.END, f"{name}, {info['type']}, {info['color']}, {info['size']}, {info['quantity']}") # 添加衣物方法 def add_clothes(self): # 弹出输入框 values = [] for field in fields: value = tk.StringVar() tk.Label(self.master, text=f"{field}:").grid(row=len(values)+6, column=0) tk.Entry(self.master, textvariable=value).grid(row=len(values)+6, column=1) values.append(value) tk.Button(self.master, text="确定", command=lambda:self.save_clothes(values)).grid(row=len(values)+7, column=0) # 保存衣物方法 def save_clothes(self, values): name = values[0].get() info = {} for i in range(1, len(values)): info[fields[i]] = values[i].get() try: with open(filename, "r") as f: clothes = json.load(f) except: clothes = {} clothes[name] = info with open(filename, "w") as f: json.dump(clothes, f) self.load_data() # 删除衣物方法 def delete_clothes(self): index = self.clothes_listbox.curselection() if index: name = self.clothes_listbox.get(index) name = name.split(",")[0] try: with open(filename, "r") as f: clothes = json.load(f) except: clothes = {} if name in clothes: del clothes[name] with open(filename, "w") as f: json.dump(clothes, f) self.load_data() # 更新衣物方法 def update_clothes(self): index = self.clothes_listbox.curselection() if index: name = self.clothes_listbox.get(index) name = name.split(",")[0] try: with open(filename, "r") as f: clothes = json.load(f) except: clothes = {} if name in clothes: # 弹出输入框 values = [] for field in fields[1:]: value = tk.StringVar(value=clothes[name][field]) tk.Label(self.master, text=f"{field}:").grid(row=len(values)+6, column=0) tk.Entry(self.master, textvariable=value).grid(row=len(values)+6, column=1) values.append(value) tk.Button(self.master, text="确定", command=lambda:self.save_update(name, values)).grid(row=len(values)+7, column=0) # 保存更新的衣物信息 def save_update(self, name, values): info = {} for i in range(len(values)): info[fields[i+1]] = values[i].get() try: with open(filename, "r") as f: clothes = json.load(f) except: clothes = {} clothes[name] = info with open(filename, "w") as f: json.dump(clothes, f) self.load_data() # 查询衣物方法 def search_clothes(self): # 弹出输入框 values = [] for field in fields: value = tk.StringVar() tk.Label(self.master, text=f"{field}:").grid(row=len(values)+6, column=0) tk.Entry(self.master, textvariable=value).grid(row=len(values)+6, column=1) values.append(value) tk.Button(self.master, text="确定", command=lambda:self.do_search(values)).grid(row=len(values)+7, column=0) # 执行查询衣物操作 def do_search(self, values): try: with open(filename, "r") as f: clothes = json.load(f) except: clothes = {} for name, info in clothes.items(): match = True for i in range(len(values)): if values[i].get() != "" and values[i].get() != info[fields[i]]: match = False break if match: self.clothes_listbox.selection_clear(0, tk.END) index = self.clothes_listbox.get(0, tk.END).index(f"{name}, {info['type']}, {info['color']}, {info['size']}, {info['quantity']}") self.clothes_listbox.selection_set(index) self.clothes_listbox.activate(index) break # 启动程序 if __name__ == "__main__": root = tk.Tk() app = ClothesManager(root) root.mainloop() ``` 运行代码后,可以看到一个简单的UI界面,包含了登录和注册功能,以及数据的增删改查的衣物管理。用户信息和衣物信息都保存在文件中,可以进行持久化存储。

相关推荐

最新推荐

recommend-type

Python3.7+tkinter实现查询界面功能

主要介绍了Python3.7+tkinter实现查询界面功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

基于python的Tkinter编写登陆注册界面

主要为大家详细介绍了基于python的Tkinter编写登陆注册界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Python操作mysql数据库实现增删查改功能的方法

主要介绍了Python操作mysql数据库实现增删查改功能的方法,涉及Python针对mysql数据库的连接、增删改查等相关操作技巧,需要的朋友可以参考下
recommend-type

Python使用tkinter库实现文本显示用户输入功能示例

主要介绍了Python使用tkinter库实现文本显示用户输入功能,结合实例形式分析了tkinter库获取用户输入及控件显示相关操作技巧,需要的朋友可以参考下
recommend-type

Python自动生成代码 使用tkinter图形化操作并生成代码框架

主要为大家详细介绍了Python自动生成代码,使用tkinter图形化操作并生成代码框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

优化MATLAB分段函数绘制:提升效率,绘制更快速

![优化MATLAB分段函数绘制:提升效率,绘制更快速](https://ucc.alicdn.com/pic/developer-ecology/666d2a4198c6409c9694db36397539c1.png?x-oss-process=image/resize,s_500,m_lfit) # 1. MATLAB分段函数绘制概述** 分段函数绘制是一种常用的技术,用于可视化不同区间内具有不同数学表达式的函数。在MATLAB中,分段函数可以通过使用if-else语句或switch-case语句来实现。 **绘制过程** MATLAB分段函数绘制的过程通常包括以下步骤: 1.
recommend-type

SDN如何实现简易防火墙

SDN可以通过控制器来实现简易防火墙。具体步骤如下: 1. 定义防火墙规则:在控制器上定义防火墙规则,例如禁止某些IP地址或端口访问,或者只允许来自特定IP地址或端口的流量通过。 2. 获取流量信息:SDN交换机会将流量信息发送给控制器。控制器可以根据防火墙规则对流量进行过滤。 3. 过滤流量:控制器根据防火墙规则对流量进行过滤,满足规则的流量可以通过,不满足规则的流量则被阻止。 4. 配置交换机:控制器根据防火墙规则配置交换机,只允许通过满足规则的流量,不满足规则的流量则被阻止。 需要注意的是,这种简易防火墙并不能完全保护网络安全,只能起到一定的防护作用,对于更严格的安全要求,需要
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。