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

如何实现ttkbootstrap Tableview从数据库自动/手动刷新?

ttkbootstrap Tableview 手动与自动刷新实现

手动刷新实现

要实现按钮触发的Tableview数据刷新,核心是重新从数据库查询数据并更新Tableview内容,具体步骤:

  1. 将数据库查询逻辑封装为独立函数,确保每次调用都能获取最新数据
  2. 修改click_Refresh函数,调用查询函数拿到新数据后,通过Tableview的delete_rows和insert_rows方法完成内容更新

自动刷新实现

如果需要周期性自动同步数据库数据,可借助tkinter的after方法,定时调用刷新函数实现自动更新。

修改后的完整代码

import ttkbootstrap as ttk
import cx_Oracle
from ttkbootstrap.tableview import Tableview
from ttkbootstrap.constants import *
from ttkbootstrap.toast import ToastNotification

# 数据库连接配置
dsn_tns = cx_Oracle.makedsn('****', '****', service_name='****')
con = cx_Oracle.connect(user=r'****', password='****', dsn=dsn_tns)
cur = con.cursor()

# 封装数据库查询函数,返回最新数据列表
def get_latest_data():
    cur.execute('''SELECT USER_ID,EMAIL,USER_STATUS from table''')
    return cur.fetchall()

def click_Refresh():
    # 获取最新数据库数据
    new_data = get_latest_data()
    # 清空表格现有内容
    dt.delete_rows()
    # 插入新数据
    dt.insert_rows(new_data)
    # 显示刷新提示
    toast.show_toast()

def auto_refresh(interval=5000):  # interval单位为毫秒,默认5秒刷新一次
    click_Refresh()
    # 定时触发下一次刷新
    app.after(interval, auto_refresh, interval)

coldata = [
    {"text": "USER_ID", "stretch": True},
    {"text": "EMAIL", "stretch": True},
    {"text": "USER_STATUS", "stretch": True},
]

app = ttk.Window(themename="superhero", size=(100, 100))
app.geometry("1000x500")
app.title("USER MANAGEMENT")
app.resizable(True, True)
app.place_window_center()

label = ttk.Label(app, text="USER MANAGEMENT VERSION 1.0", bootstyle=DEFAULT)
label.pack(pady=5)
label.config(font=("Arial", 20, "bold"))

button_frame = ttk.Frame(app)
button_frame.pack(pady=10, padx=2, fill="x")
ttk.Button(button_frame, text="Refresh", bootstyle="OUTLINE-SUCCESS",
           command=click_Refresh).pack(side=LEFT, padx=10, pady=5)

# 初始化Tableview时传入最新数据
dt = Tableview(
    master=app,
    paginated=False,
    searchable=True,
    height=50,
    autoalign=False,
    autofit=True,
    pagesize=30,
    coldata=coldata,
    rowdata=get_latest_data(),
    bootstyle=DANGER,
)

dt.pack(fill=BOTH, expand=YES, padx=10, pady=10)
dt.autofit_columns()

# 刷新提示框配置
toast = ToastNotification(
    title="Refresh Notifcation",
    message=("Database version:", cx_Oracle.version,
             "Database version:", con.version,
             "Client version:", cx_Oracle.clientversion()
             ),
    duration=9000,
    bootstyle=DARK,
    alert=True,
)

# 如需启用自动刷新,取消下方注释
# auto_refresh(5000)

app.mainloop()

关键说明

  • get_latest_data函数:统一处理数据库查询逻辑,返回可直接用于Tableview的列表格式数据
  • click_Refresh函数:先清空表格旧数据,再插入新查询结果,完成手动刷新流程
  • auto_refresh函数:通过after方法实现定时递归调用,可根据业务需求调整刷新间隔
  • 长期运行建议:可在查询函数中添加数据库连接有效性检查,避免因连接失效导致刷新失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:42:25