tksheet组件打印选中单元格值失败问题求助
解决tksheet选中单元格值无法正确获取的问题
你的代码存在三个关键问题,导致无法正确获取选中单元格的值:
- 选中单元格的变量初始化时机错误:
selected_cells = sheet.get_selected_cells()是在程序启动时执行的,此时还没有任何单元格被选中,后续点击时这个变量不会自动更新。必须在点击事件的回调函数内实时获取当前选中的单元格。 - 注释掉了行列赋值代码:你把
row, column = selected_cells[0]注释掉了,导致后续调用get_cell_data时没有定义row和column变量。 - 使用
<1>绑定可能和tksheet自身的选中逻辑冲突:tksheet有自己的选中事件处理,直接绑定鼠标左键点击可能会干扰组件的原生选中流程,建议使用tksheet提供的<<SheetSelected>>事件,或者确保在回调中先让组件完成选中操作。
修正后的代码如下:
import tkinter as tk import sqlite3 import tksheet top = tk.Tk() sheet = tksheet.Sheet(top, width=943) sheet.place(relx=0.0, rely=0.1) conn = sqlite3.connect('dbz/data.db') c = conn.cursor() # 注意:table是SQL关键字,建议修改表名或用反引号包裹 c.execute('''SELECT * FROM `table`''') rows = c.fetchall() sheet.set_sheet_data(data=rows) sheet.enable_bindings(("single_select", "column_select", "row_select", "column_width_resize", "row_height_resize", "arrowkeys", "right_click_popup_menu", "rc_select", "rc_insert_row", "rc_delete_row", "copy", "cut", "paste", "delete", "undo", "edit_cell", "drag_select")) def pr(e): # 实时获取当前选中的单元格 selected_cells = sheet.get_selected_cells() if selected_cells: row, column = selected_cells[0] value = sheet.get_cell_data(r=row, c=column, return_copy=True) print(value) else: print("No cell is selected") # 使用tksheet原生选中事件替代鼠标左键绑定 sheet.bind("<<SheetSelected>>", pr) top.mainloop()
额外说明
如果坚持使用鼠标左键绑定,可以在回调中添加短暂延迟(比如用top.after(10, lambda: ...)),保证tksheet完成选中状态更新后再获取数据,但更推荐使用组件原生的<<SheetSelected>>事件,这是tksheet专门用于监听选中状态变化的事件。
内容的提问来源于stack exchange,提问作者Andreja Milosavljevic
相关产品推荐
相关产品推荐

