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

Tkinter自生成按钮重启GUI后不持久化问题咨询

实现方案

我们用Python内置的SQLite做轻量持久化存储,无需额外依赖,修改后的完整代码如下:

from tkinter import *
import sqlite3

# 数据库初始化
def init_db():
    conn = sqlite3.connect('buttons.db')
    c = conn.cursor()
    # 表不存在就创建,仅存储按钮文本即可
    c.execute('''CREATE TABLE IF NOT EXISTS buttons (id INTEGER PRIMARY KEY AUTOINCREMENT, f_name TEXT)''')
    conn.commit()
    conn.close()

# 加载历史按钮
def load_history_buttons(frame):
    conn = sqlite3.connect('buttons.db')
    c = conn.cursor()
    c.execute('SELECT f_name FROM buttons ORDER BY id ASC')
    records = c.fetchall()
    conn.close()
    # 遍历所有历史记录生成按钮
    for record in records:
        auto_button = Button(frame, text=record[0])
        auto_button.pack(side="top")

# 主程序部分
root = Tk()
root.title('Button')
root.geometry('400x400')

# 启动先初始化数据库
init_db()

#Entry & Label
f_name = Entry(root, width=30)
f_name.grid(row=0, column=1)
f_name_lbl = Label(root, text="First Name:")
f_name_lbl.grid(row=0, column=0)

# 修改生成按钮函数,新增写入数据库逻辑
def gen_button():
    btn_text = f_name.get().strip()
    if btn_text: # 空内容不生成按钮
        # 生成UI按钮
        auto_button = Button(button_frame, text=btn_text)
        auto_button.pack(side="top")
        # 写入数据库持久化存储
        conn = sqlite3.connect('buttons.db')
        c = conn.cursor()
        c.execute('INSERT INTO buttons (f_name) VALUES (?)', (btn_text,))
        conn.commit()
        conn.close()
        # 清空输入框方便下次输入
        f_name.delete(0, END)

submit_btn = Button(root, text="Submit:", command=gen_button)
submit_btn.grid(row=1, column=0, columnspan=2, ipadx=100)

button_frame = Frame(root)
button_frame.grid(row=2, column=0, columnspan=2, sticky="nsew")

# 启动时加载所有历史按钮
load_history_buttons(button_frame)

root.mainloop()

核心逻辑说明

  • 数据库初始化:程序启动时先创建存储按钮数据的表,重复启动不会重复建表报错
  • 历史按钮加载:单独封装按钮加载函数,启动时从数据库按生成顺序读取所有历史按钮文本,逐个生成UI按钮
  • 提交逻辑优化:点击提交时先校验输入非空,生成按钮的同时把按钮文本写入数据库,保证重启后可读取
  • 所有依赖都是Python标准库,无需额外安装第三方包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:36:05