【问题标题】:How to delete record from tkinter treeview to apply the changes in sqlite3如何从 tkinter 树视图中删除记录以应用 sqlite3 中的更改
【发布时间】:2018-07-20 04:10:01
【问题描述】:

我正在尝试使用tree.selection() 方法删除tkinter treeview 中显示的记录。我希望在treeview 中选择的row 也从sqlite3db 中删除,但是当我选择要删除的row 时,我收到了这个错误

_tkinter.TclError:我找不到项目

我在网站上找到了这个link,但我没有回答我的才华。

from tkinter import ttk
import tkinter as tk
import sqlite3


def connect():
    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS profile(id INTEGER PRIMARY KEY, 
First TEXT, Surname TEXT)")
    conn.commit()
    conn.close()


def Delete():
    selected_item = tree.selection()[0]

    print(selected_item)  # it prints the selected row id

    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    cur.execute("DELETE FROM profile WHERE id=?", (selected_item,))
    conn.commit()

    for b in selected_item:
        tree.delete(b)

    conn.close()


connect()  #  this to create the db

root = tk.Tk()
root.geometry("400x400")

tree= ttk.Treeview(root, column=("column1", "column2", "column3"), 
show='headings')
tree.heading("#1", text="NUMBER") 
tree.heading("#2", text="FIRST NAME")
tree.heading("#3", text="SURNAME")
tree.pack()


b2 = tk.Button(text="DELETE FROM PARTICULAR DATA TREEVIEW AND SQLITE3", 
command=Delete)
b2.pack(side=tk.BOTTOM)

root.mainloop()

【问题讨论】:

    标签: python tkinter sqlite treeview


    【解决方案1】:

    你的Delete函数存在三个问题:

    • 首先,你做

      for b in selected_item:
          tree.delete(b)
      

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

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

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

      selected_item 是树中的项目ID,而不是数据库中的。 db id 是第一列中的一个,您可以使用

      tree.set(selected_item, '#1')
      
    • 1234563 .

    这是完整的功能:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 2018-07-17
      • 2019-01-16
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2020-10-19
      相关资源
      最近更新 更多