如何永久更改列表中的项目?

问题描述 投票:0回答:1

我在 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()

但问题是,当我在更改项目后重新运行代码时,这些项目只是以前的项目。 我希望当我更改某个项目时,它将保存在内存中(存储它),并且当我重新运行程序时,该项目就是更改后的项目。我该怎么办?

python list tkinter listbox storage
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 文件中,以便您再次启动该文件时做好准备。

© www.soinside.com 2019 - 2024. All rights reserved.