如何永久改变列表中的一个项目?

-3 投票
1 回答
67 浏览
提问于 2025-04-13 15:48

我有一个用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()

但是问题是,当我在修改了某个项目后重新运行代码时,列表里的内容还是之前的那些。我希望在我修改了某个项目后,它能被保存到内存里(也就是存储起来),这样当我重新运行程序时,列表里的内容就是我修改过的。那我该怎么做呢?

1 个回答

1

这里的意思是,你在运行相同的代码,并且用的是相同的固定值。你需要把列表单独存储起来(放在一个不同的文件里)。一个适合初学者的方法就是使用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文件里,下次你再启动文件时就可以用了。

撰写回答