Tkinter报错:Item 1 1未找到,数据库布尔值渲染复选图标失败
问题解决:Tkinter Treeview显示数据库布尔值图标异常及报错处理
错误原因分析
- 报错根源:代码里
trv.focus(i)完全错误,focus()接收的是Treeview已存在的item ID,你传入的却是数据库返回的元组i,自然找不到对应item,触发_tkinter.TclError: Item 1 1 not found。 - 逻辑错误:还没把数据库数据插入Treeview,就去获取Treeview的item信息,属于顺序颠倒;判断勾选状态时,错误去取Treeview item的值,应该直接用数据库查询结果里的
selection字段。
修正后的代码
def employee(): global email_field, checkfield conn = sqlite3.connect('schoonschip.db') cursorr = conn.cursor() cursorr.execute("SELECT email, rowid, selection FROM employee ") employe = cursorr.fetchall() trv.delete(*trv.get_children()) for emp in employe: # 直接取数据库返回的selection字段值(索引2,对应查询顺序里的第三个字段) if emp[2] == 1: trv.insert('', 'end', values=emp, tags='check') else: trv.insert('', 'end', values=emp, tags='uncheck') conn.commit() conn.close() employee()
关键修改点
- 删除错误的
trv.item(trv.focus(i))相关代码,直接用数据库查询结果判断状态 - 用
emp[2]直接获取selection字段值,避免无意义的Treeview item操作 - 将变量名
i改为emp,提升代码可读性
内容的提问来源于stack exchange,提问作者UGC61
相关产品推荐
相关产品推荐

