优化这段代码,实现tkinter图形化界面
时间: 2023-10-19 13:16:50 浏览: 148
好的,对于固定资产管理系统的Python代码示例,我们可以使用Tkinter库来实现图形化界面,下面是优化后的代码示例:
```python
import tkinter as tk
class Asset:
def __init__(self, name, price, date, status):
self.name = name # 资产名称
self.price = price # 资产价格
self.date = date # 资产购置日期
self.status = status # 资产状态(在用、闲置、报废)
class AssetManager:
def __init__(self):
self.assets = [] # 资产列表
def add_asset(self, asset):
"""新增资产"""
self.assets.append(asset)
def search_asset(self, name):
"""查询资产"""
for asset in self.assets:
if asset.name == name:
return asset
return None
def change_asset(self, name, price, status):
"""变更资产"""
asset = self.search_asset(name)
if asset:
asset.price = price
asset.status = status
return True
return False
def discard_asset(self, name):
"""报废资产"""
asset = self.search_asset(name)
if asset:
asset.status = '报废'
return True
return False
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.master.title('固定资产管理系统')
self.pack()
self.create_widgets()
self.manager = AssetManager()
def create_widgets(self):
# 资产名称输入框
self.name_label = tk.Label(self, text='资产名称')
self.name_label.grid(row=0, column=0)
self.name_entry = tk.Entry(self)
self.name_entry.grid(row=0, column=1)
# 资产价格输入框
self.price_label = tk.Label(self, text='资产价格')
self.price_label.grid(row=1, column=0)
self.price_entry = tk.Entry(self)
self.price_entry.grid(row=1, column=1)
# 资产购置日期输入框
self.date_label = tk.Label(self, text='购置日期')
self.date_label.grid(row=2, column=0)
self.date_entry = tk.Entry(self)
self.date_entry.grid(row=2, column=1)
# 资产状态下拉框
self.status_label = tk.Label(self, text='资产状态')
self.status_label.grid(row=3, column=0)
self.status_var = tk.StringVar()
self.status_var.set('在用')
self.status_optionmenu = tk.OptionMenu(self, self.status_var, '在用', '闲置', '报废')
self.status_optionmenu.grid(row=3, column=1)
# 新增资产按钮
self.add_button = tk.Button(self, text='新增资产', command=self.add_asset)
self.add_button.grid(row=4, column=0)
# 查询资产按钮
self.search_button = tk.Button(self, text='查询资产', command=self.search_asset)
self.search_button.grid(row=4, column=1)
# 变更资产按钮
self.change_button = tk.Button(self, text='变更资产', command=self.change_asset)
self.change_button.grid(row=5, column=0)
# 报废资产按钮
self.discard_button = tk.Button(self, text='报废资产', command=self.discard_asset)
self.discard_button.grid(row=5, column=1)
# 查询结果显示框
self.result_text = tk.Text(self, height=5, width=30)
self.result_text.grid(row=6, columnspan=2)
def add_asset(self):
"""新增资产"""
name = self.name_entry.get()
price = self.price_entry.get()
date = self.date_entry.get()
status = self.status_var.get()
asset = Asset(name, price, date, status)
self.manager.add_asset(asset)
self.result_text.insert('end', '新增资产成功\n')
def search_asset(self):
"""查询资产"""
name = self.name_entry.get()
asset = self.manager.search_asset(name)
if asset:
self.result_text.insert('end', f'查询到资产:{asset.name}, {asset.price}, {asset.date}, {asset.status}\n')
else:
self.result_text.insert('end', '没有查询到资产\n')
def change_asset(self):
"""变更资产"""
name = self.name_entry.get()
price = self.price_entry.get()
status = self.status_var.get()
if self.manager.change_asset(name, price, status):
self.result_text.insert('end', '变更资产成功\n')
else:
self.result_text.insert('end', '没有查询到资产或变更资产失败\n')
def discard_asset(self):
"""报废资产"""
name = self.name_entry.get()
if self.manager.discard_asset(name):
self.result_text.insert('end', '报废资产成功\n')
else:
self.result_text.insert('end', '没有查询到资产或报废资产失败\n')
# 测试代码
if __name__ == '__main__':
root = tk.Tk()
app = Application(master=root)
app.mainloop()
```
在优化后的代码中,我们先定义了一个继承自Tkinter中Frame类的Application类,同时在init方法中创建了所有的界面元素,并添加了相应的事件处理方法。在事件处理方法中,我们调用AssetManager类中的方法来实现对固定资产的增删改查。
运行代码后,将弹出一个图形化界面,用户可以在界面中输入资产信息并进行相应的操作。
阅读全文
相关推荐















