如何使用Sqlite填充Tkinter下拉列表?

时间:2016-07-26 13:40:16

标签: database python-3.x combobox tkinter listbox

如何使用Sqlite填充Tkinter下拉列表?

这就是我所拥有的:

from tkinter import *
import sqlite3

root = Tk()
root.title('Testing Combobox, Listbox & Database')

db = sqlite3.connect('vehicles.db')
c = db.cursor()

# create Combobox
var = StringVar(root)
#var.set("") # initial value

# create Listbox
list = Listbox(root, width=50, height=20)

# Populate Listbox
query = c.execute('SELECT models FROM autos')
for i in query:
    listitems.insert(END,i)

# INSERT LISTBOX INTO COMBOBOX? HOW?
options = OptionMenu(root, var, xxxxxxx).pack()

root.mainloop()

3 个答案:

答案 0 :(得分:2)

我建议你使用一个组合框

list=Combobox(root, width=50, height=20)
list['values']=listitems
list.pack()
这对我有用。 虽然由于某种原因我必须明确导入ttk

from tkinter import ttk
list=ttk.Combobox(root, width=50, height=20)
list['values']=listitems
list.pack()

在完全填充“列表项目”之后输入此代码,即在' for循环之后

答案 1 :(得分:0)

更好的(或正确的方法)应该是删除:

listitems = Listbox(root)
listitems = query.fetchall()

并替换:

list['values']=listitems

list['values']=query.fetchall()

答案 2 :(得分:0)

这是完整的工作代码。 OP在评论中提出的建议几乎可以奏效,但我能做的最好的事情是将下拉列表中的值用大括号括起来。使用here改编的代码,我得出了OP试图做的完整工作代码。

import tkinter as tk
from tkinter import ttk
import sqlite3

def create_table():
    conn = sqlite3.connect('vehicles.db')
    cur = conn.cursor()

    cur.execute("DROP TABLE IF EXISTS autos;") # use this line only if you want to overwrite existing table

    cur.execute("CREATE TABLE IF NOT EXISTS autos ('models' TEXT, 'year' DATE);")
    conn.commit()

    cur.execute("INSERT INTO autos VALUES ('Ford Falcon', 1965);")
    cur.execute("INSERT INTO autos VALUES ('Chevy BelAir', 1954);")
    conn.commit()

    cur.close()
    conn.close()

def combo_values_input():

    conn = sqlite3.connect('vehicles.db')
    cur = conn.cursor()

    query = cur.execute('SELECT models FROM autos')

    data = []
    for row in cur.fetchall():
        data.append(row[0])
    return data

    cur.close()
    conn.close()

root = tk.Tk()
root.title('Testing Tkinter Combobox with Sqlite')

create_table()

combo = ttk.Combobox(root, width=50, height=20)
combo.grid()
combo['values'] = combo_values_input()

root.mainloop()
相关问题