我在 tkinter 中有一个程序,其中有一个列表,我将列表项传输到列表框。 当我运行它时,有一个列表框,您可以通过按按钮并在输入框中写入内容来更改项目。 这是我的代码
import tkinter as tk
from tkinter import ttk, ACTIVE, END
window = tk.Tk()
window.title("برنامهء مغازه")
window.geometry("900x500")
window.configure(background = "white")
window.resizable(width=False,height=False)
tab_parent = ttk.Notebook(window)
tab_1 = ttk.Frame(tab_parent)
tab_2 = ttk.Frame(tab_parent)
tab_parent.add(tab_1,text="خرید قسطی")
tab_parent.add(tab_2,text="کالاها")
def Update(data):
list_box.delete(0,END)
for item in data:
list_box.insert(END,item)
def fillout(e):
entry_search.delete(0,END)
entry_search.insert(0,list_box.get(ACTIVE))
def check(e):
typed = entry_search.get()
if typed == "":
data = products
else:
data = []
for item in products:
if typed in item:
data.append(item)
Update(data)
label_search = tk.Label(tab_2,text="جستجو")
label_search.grid(column=0,row=0)
label_search.pack()
entry_search = tk.Entry(tab_2,justify="right",width="60")
entry_search.pack(pady=5)
list_box = tk.Listbox(tab_2,justify="right",width="60")
list_box.pack(pady=15)
products = ["مخلوط کن دلمونتی",
"هم زن حرفه ای دلمونتی ",
"غذا ساز 4 کاره دلمونتی",
"آب مرکبات گیر دلمونتی"]
def edit():
typed_2 = entry_search.get()
if typed_2 == "":
data = products
elif typed_2 in products:
global index_item_in_products
index_item_in_products = products.index(typed_2)
def confirm():
typed_3 = entry_search.get()
products[index_item_in_products] = typed_3
Update(products)
btn_edit = tk.Button(tab_2,text="ویرایش",command=edit)
btn_edit.pack(pady=5)
btn_edit_confirm = tk.Button(tab_2,text="تایید ویرایش",command=confirm)
btn_edit_confirm.pack(pady=10)
Update(products)
list_box.bind("<<ListboxSelect>>",fillout)
entry_search.bind('<KeyRelease>',check)
tab_parent.pack()
window.mainloop()
但问题是,当我在更改项目后重新运行代码时,这些项目只是以前的项目。 我希望当我更改某个项目时,它将保存在内存中(存储它),并且当我重新运行程序时,该项目就是更改后的项目。我该怎么办?
所以这里的问题是您使用相同的硬编码值运行相同的代码。您必须单独存储该列表(在不同的文件中)。一种常见的初学者友好的方法是使用 json。看看这个 https://www.w3schools.com/python/python_json.asp
编辑: 当文件启动时,您可以运行诸如
之类的函数def load_data(file_name):
with open(file_name, 'r') as file:
data = json.load(file)
return data
然后您可以使用这样的方式访问数据
data = load_data(json_file)
更改后保存数据
def save_data(data, file_name):
with open(file_name, 'w') as file:
json.dump(data, file, indent=4)
然后,这将保存在同一个 json 文件中,以便您再次启动该文件时做好准备。