无法通过.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
相关产品推荐
相关产品推荐

