python - 如何在Treeview中显示条目小部件内容

标签 python wpf tkinter treeview

将内容保存到 sqlite3 db 后,尝试在 treeview 中显示输入 entry 小部件的内容。内容保存到 db ,但不会在treeview中显示idFist nameSurname内容。

欢迎您提出建议来实现这一目标。

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 Insert():
    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    fr=cur.execute("INSERT INTO profile (First, Surname) VALUES(?, ?)", 
    (first_text.get(), surname_text.get()))
    conn.commit()
    for items in fr:
        tree.insert('', tk.END, values=items)

    conn.close()



connect()  #  this to create the db


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

tree= ttk.Treeview(root, column=("column", "colunn1"))
tree.heading("#0", text="NUMBER")
tree.heading("#1", text="FIRST NAME")
tree.heading("#2", text="SURNAME")
tree.pack()


first_text = tk.StringVar()
e1 = tk.Entry(root, textvariable=first_text)
e1.pack()
surname_text = tk.StringVar()
e2 = tk.Entry(root, textvariable=surname_text)
e2.pack()

b1 = tk.Button(text="add data", command=Insert)
b1.pack(side=tk.BOTTOM)

root.mainloop()

最佳答案

代码中的问题是 for items in fr 不起作用。 Python 将 fr 视为一个空的可迭代对象(将 print 语句放入 for 循环中,您将看到它永远不会被执行)。因此,要在 TreeView 中插入数据,您可以直接从条目中获取数据,并使用 cur.lastrowid 检索数据库 id (我在答案中找到了这个解决方案对于问题 How to retrieve inserted id after inserting row in SQLite using Python? ):

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 Insert():
    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    data = (first_text.get(), surname_text.get())
    # insert data in db
    cur.execute("INSERT INTO profile (First, Surname) VALUES(?, ?)", data)  
    conn.commit()
    # insert data in treeview
    tree.insert('', tk.END, text=str(cur.lastrowid), values=data)  
    conn.close()


connect()  #  this to create the db

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

tree= ttk.Treeview(root, column=("column", "colunn1"))
tree.heading("#0", text="NUMBER")
tree.heading("#1", text="FIRST NAME")
tree.heading("#2", text="SURNAME")
tree.pack()


first_text = tk.StringVar()
e1 = tk.Entry(root, textvariable=first_text)
e1.pack()
surname_text = tk.StringVar()
e2 = tk.Entry(root, textvariable=surname_text)
e2.pack()

b1 = tk.Button(text="add data", command=Insert)
b1.pack(side=tk.BOTTOM)

root.mainloop()

编辑:如果您使用列“#1”、“#2”、“#3”以避免使用特殊 列“#0”,那么您需要稍微更改一下Insert:您需要在values而不是text中传递行ID。

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 Insert():
    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    data = (first_text.get(), surname_text.get())
    # insert data in db
    cur.execute("INSERT INTO profile (First, Surname) VALUES(?, ?)", data)  
    conn.commit()
    # insert data in treeview
    tree.insert('', tk.END, values=(str(cur.lastrowid),) + data)  
    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()

first_text = tk.StringVar()
e1 = tk.Entry(root, textvariable=first_text)
e1.pack()
surname_text = tk.StringVar()
e2 = tk.Entry(root, textvariable=surname_text)
e2.pack()

b1 = tk.Button(text="add data", command=Insert)
b1.pack(side=tk.BOTTOM)

root.mainloop()

关于python - 如何在Treeview中显示条目小部件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660500/

相关文章:

c# - WPF MVVM 父子关系

c# - 如何添加资源 : xml file

python - 如何使用 tkinter 更改按钮颜色

python - 如何使用 tkinter 和 python oop 将项目/小部件放入其他类中

python - 在 while 循环中处理异常 - Python

python - 如果某些较低级别索引不存在,则删除较高级别多重索引的所有行

python - numpy.diff 问题的导数

c# - 如何在单独的线程中打开一个窗口?

python - 如何在 python 中将完整输出写入文件而不附加

python - 如何通过标签更改Treeview中项目的背景/前景?