如何从tkinter treeview中删除记录以应用sqlite3中的更改

时间:2018-02-09 11:37:15

标签: python tkinter sqlite treeview

我尝试使用(3.3, 4.5) + Point((1, 3)) //Error:No implicit view available from Double => Int. 方法删除tkinter treeview中显示的记录。我希望所选的tree.selection()中的所选row也可以从treeview数据库中删除,但是当我选择要删除的sqlite3时,我收到此错误

  

_tkinter.TclError:找不到项目

我在网站上发现了这个link,但我没有回答我的才能。

row

1 个答案:

答案 0 :(得分:1)

Delete功能有三个问题:

  • 首先,你做

    for b in selected_item:
        tree.delete(b)
    

    selected_item是一个字符串,因此您遍历项ID的字符。我认为您想要做的是迭代选定的项目,例如:

    for selected_item in tree.selection():
        tree.delete(selected_item)
    
  • 其次,您尝试使用

    删除db条目
    cur.execute("DELETE FROM profile WHERE id=?", (selected_item,))
    

    但是selected_item是树中的项ID,而不是db中的项ID。 db id是第一列中的ID,您可以使用

    获取它
    tree.set(selected_item, '#1')
    
  • 最后,如果没有选定的项目,行selected_item = tree.selection()[0]将抛出错误,但如果您想要删除所有选定的项目,则不再需要此行(请参阅代码下文)。

这是完整的功能:

def Delete():
    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    for selected_item in tree.selection():
        print(selected_item)  # it prints the selected row id
        cur.execute("DELETE FROM profile WHERE id=?", (tree.set(selected_item, '#1'),))
        conn.commit()
        tree.delete(selected_item)
    conn.close()