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

无法通过.bind("<<TreeviewSelect>>")获取ttkbootstrap TableView选中行数据

问题:ttkbootstrap TableView无法触发<>事件获取选中行数据

之前使用tkinter Treeview时,只需绑定<<TreeviewSelect>>事件就能触发自定义回调获取选中行数据,但切换到ttkbootstrap的TableView组件后,直接给TableView实例绑定该事件,回调函数完全不触发。不想用bind_all(会影响应用内其他控件),该如何正确获取选中行数据?

解决方案

ttkbootstrap的TableView是对Treeview的封装,事件需要绑定到其内部的Treeview对象上,而不是TableView本身。可以通过TableView实例的treeview属性获取内部Treeview组件,再为它绑定<<TreeviewSelect>>事件。

修改后的代码示例

import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.tableview import Tableview

def on_tv_select(event):
    # 获取选中行的ID
    selected_items = event.widget.selection()
    if selected_items:
        # 获取选中行的数据
        selected_data = event.widget.item(selected_items[0])['values']
        print(f"选中行数据:{selected_data}")

if __name__ == '__main__':
    colData = [{'text': 'carID', 'stretch': True},
               {'text': 'Make', 'stretch': True},
               {'text': 'Model', 'stretch': True}]
    rowData = [(1,'Make ZZ', 'Model BA'),
               (2,'Make DD', 'Model Ed'),
               (3,'Z Dude','That other')]
    mainWindow = tk.Tk()
    mainWindow.title("POC-Main Window")

    myTableView = Tableview(master=mainWindow,coldata=colData,rowdata=rowData,paginated=True,searchable=True,bootstyle='primary')
    myTableView.pack(fill='both', expand=True, padx=10, pady=10)
    
    # 绑定到内部的treeview组件
    myTableView.treeview.bind("<<TreeviewSelect>>", on_tv_select)
    
    mainWindow.mainloop()

说明

  • 通过myTableView.treeview获取TableView内部的原生Treeview控件
  • 在回调函数中,event.widget就是内部的Treeview对象,用selection()获取选中行ID,item()方法提取行数据的values字段即可拿到选中行的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:12:02