Python 在tkinter列表小部件中列出数据并隐藏主索引,但仍将其用于

Python 在tkinter列表小部件中列出数据并隐藏主索引,但仍将其用于,python,sqlite,tkinter,Python,Sqlite,Tkinter,我已经创建了一个sqlite3数据库: def connect(): conn=sqlite3.connect("todo.db") cur=conn.cursor() cur.execute("CREATE TABLE IF NOT EXISTS todo (id INTEGER PRIMARY KEY, tasks TEXT, typ TEXT, difficulty TEXT, frequency TEXT, deadline TEXT

我已经创建了一个sqlite3数据库:

def connect():
    conn=sqlite3.connect("todo.db")
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS todo (id INTEGER PRIMARY KEY, tasks TEXT, typ TEXT, difficulty TEXT, frequency TEXT, deadline TEXT)")
    conn.commit()
    conn.close()
我从中获取数据:

def view():
    conn=sqlite3.connect("todo.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM todo")
    rows=cur.fetchall()
    conn.close()
    return rows
并在tkinter列表小部件中显示它们:

def view_command():
    list1.delete(0,END)
    for row in tdo.view():
        row = str(row).strip("()")
        row = row.replace("'","")
        row = row.strip()
        list1.insert(END,row)
它按预期显示行的所有元素:

12,完成某事,待办事项,困难,经常,12.08.2020

现在我要做的是在列表中显示这一行,不带索引:

完成某事,待办事项,困难,经常,2020年8月12日

为此,我没有从数据库中选择id,并尝试使用strip和类似函数将其排除在外。但随后身份证就丢失了。我希望能够通过id选择行以进一步使用它

def get_selected_row(event):
    try:
        global selected_tuple
        index=list1.curselection()[0]
        selected_tuple=list1.get(index)
        selected_tuple = tuple(selected_tuple.split (","))

因此,简而言之,我如何从数据库中获取索引,在列表小部件中隐藏索引,但在选择它时仍然能够使用它?

您可以创建一个映射文件,将列表框索引映射到数据库id

以下示例假定数据库id是行的第一个元素

def view_command():
    list1.mapping = []
    list1.delete(0,END)
    for row in tdo.view():
        db_id = row.pop(0)
        list1.mapping.append(db_id)
        row = str(row).strip("()")
        row = row.replace("'","")
        row = row.strip()
        list1.insert(END,row)
现在,从列表框中给定索引
x
,数据库id将是
list1.mapping[x]


与其将列表转换为字符串,然后删除转换过程中添加的字符,不如用逗号和空格连接列表

例如:

row = ", ".join(row)

你厌倦了对数据库中的数据进行切片了吗?