【问题标题】:How to output sqlite3 data in tkinter treeview如何在 tkinter 树视图中输出 sqlite3 数据
【发布时间】:2018-07-17 21:27:14
【问题描述】:

我在如何将我的sqlite3db 中的所有记录输出到tkinter treeview 时遇到问题。它只输出db 中的最后一条记录,而且这些记录也没有出现在为其指定的列中。@ 987654324@ 方法将所有db 记录打印到我的终端,但不会将所有记录输出到treeview 小部件。

欢迎您的建议来实现这一目标

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 View():
    conn = sqlite3.connect("TRIAL.db")
    cur = conn.cursor()
    cur.execute("SELECT * FROM profile")
    rows = cur.fetchall()
    for row in rows:
        print(row) # it print all records in the database
    tree.insert("", tk.END, values=row)
    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()

b2 = tk.Button(text="view data", command=View)
b2.pack()

root.mainloop()

【问题讨论】:

  • 我看到您创建了一个表,但您是否在选择之前将数据插入到该表中?
  • @ZackTarr 是的,记录已经退出
  • tree.insert("", tk.END, values=row) 不在 for 循环中。是不是问题中的错字?
  • @j_4321 这是代码中的错字

标签: python tkinter sqlite treeview


【解决方案1】:

您的代码中有两个问题:

  • 首先是tree.insert("", tk.END, values=row)不在for循环内,所以只会在树视图中插入最后一行。
  • 第二个是#0列是特殊列,它的值是用text=...设置的,而不是values=(...)。要正确显示您的数据,您至少有两种选择:

    • 首先是将tree.insert("", tk.END, values=row)替换为tree.insert("", tk.END, text=row[0], values=row[1:])
    • 第二个是不要使用特殊列#0,你不需要它,因为你将树视图用作表格。创建树时,使用选项 show='headings' 隐藏列 #0 并创建 3 列:

      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 View():
          conn = sqlite3.connect("TRIAL.db")
          cur = conn.cursor()
          cur.execute("SELECT * FROM profile")
          rows = cur.fetchall()
          for row in rows:
              print(row) # it print all records in the database
              tree.insert("", tk.END, values=row)
          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="view data", command=View)
      b2.pack()
      
      root.mainloop()
      

【讨论】:

  • 这太棒了!谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多