You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中能否使用列表存储Listbox数据实现程序重启后数据留存

问题分析

原来的代码存在两处核心问题:

  1. 插入逻辑错误:insert函数每次新增数据时会遍历整个内存列表重复往Listbox插入内容,会导致Listbox数据重复展示
  2. 无持久化机制:所有数据仅存在于内存的ex列表中,程序关闭后内存释放,数据就会丢失
实现思路

要实现关闭后数据留存,只需要把数据同步存储到本地磁盘文件即可,简单场景下用普通TXT文件存储就足够,不需要引入数据库:

  • 程序启动时读取本地存储文件的历史数据,加载到Listbox和内存列表中
  • 每次新增数据时,同时更新内存列表、Listbox组件、本地文件,保证数据一致
修正后完整代码
from tkinter import * 

# 存储数据的本地文件名
STORAGE_FILE = "list_data.txt"
ex = []

def load_history():
    """启动时加载历史数据"""
    try:
        with open(STORAGE_FILE, "r", encoding="utf-8") as f:
            for line in f.readlines():
                # 去掉换行符
                data = line.strip()
                if data:
                    ex.append(data)
                    listbox.insert(listbox.size(), data)
    except FileNotFoundError:
        # 文件不存在则创建空文件
        with open(STORAGE_FILE, "w", encoding="utf-8") as f:
            pass

def insert():
    """插入新数据"""
    new_data = entry.get().strip()
    if not new_data:
        return
    # 更新内存列表
    ex.append(new_data)
    # 更新Listbox
    listbox.insert(listbox.size(), new_data)
    # 同步写入本地文件
    with open(STORAGE_FILE, "a", encoding="utf-8") as f:
        f.write(new_data + "\n")
    # 清空输入框
    entry.delete(0, END)

window = Tk()
listbox = Listbox(window)
listbox.pack()
button = Button(window, text="insert", command=insert)
button.pack()
entry = Entry(window, width=15)
entry.pack()

# 启动时先加载历史数据
load_history()

window.mainloop()
关键说明
  • 所有数据会存储在代码同级目录的list_data.txt文件中,只要不删除该文件,下次打开程序会自动加载所有历史数据
  • 修正了原代码重复插入的问题,每次仅插入新输入的内容,不会重复展示
  • 新增了空输入过滤逻辑,不会插入空内容到列表中

内容的提问来源于stack exchange,提问作者Madjid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:57:03