如何实现ttkbootstrap Tableview从数据库自动/手动刷新?
ttkbootstrap Tableview 手动与自动刷新实现
手动刷新实现
要实现按钮触发的Tableview数据刷新,核心是重新从数据库查询数据并更新Tableview内容,具体步骤:
- 将数据库查询逻辑封装为独立函数,确保每次调用都能获取最新数据
- 修改
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
相关产品推荐
相关产品推荐

