我该如何使用从SQLite数据库检索的数据填充tkinter下拉框?

3

基本上,我有一个电影院预订系统,其中包含一个数据库,存储了哪些电影在什么时间和日期播放。我已成功以所需格式打印内容,但是我不确定如何在使用tkinter下拉菜单时使用该数据,以逐个显示下面显示的行。

import sqlite3 as lite
conn = lite.connect('Logindetails.db')

with conn:

    conn.row_factory = lite.Row
    cursor = conn.cursor()

    title = raw_input("Name of tile: ")

    query = "SELECT * FROM Viewings WHERE Title=?"
    cursor.execute(query, (title,))

    rows = cursor.fetchall()

    for row in rows:
        data = "%s %s %s %s %s" % (row["Id"], row["Title"], row["Date"], row["Time"], row["Duration"])
        print data

这是我检索所需数据的代码。这是它的输出结果。
Name of tile: Frozen
1 Frozen 06/15 11:35 95
3 Frozen 06/18 11:35 95
4 Frozen 06/30 11:25 95
5 Frozen 07/02 11:45 95
6 Frozen 07/05 12:30 95

我已经编写了tkinter项目的基础,但不确定如何操作这些数据并将其导入到下拉框中,以便每个数据集都可以单独选择。

1个回答

2

您可以在代码的某个位置定义movieList数组,然后将for循环中创建的字符串附加到movieList数组中:

movieList = []
...
for row in rows:
        data = "%s %s %s %s %s" % (row["Id"], row["Title"], row["Date"], row["Time"], row["Duration"])
        movieList.append(data)
        print data

作为副注,你可以忽略 row["Id"] 和 row["Duration"] 字段,因为前者对用户并不重要,后者是多余的。
然后,使用 OptionMenu 小部件轻松构建下拉菜单;以下是一个最小化示例,其中包含硬编码值,你的 movieList 将在上述 for 循环中动态构建:
from Tkinter import *

movieList = ["1 Frozen 06/15 11:35 95", "3 Frozen 06/18 11:35 95",
        "4 Frozen 06/30 11:25 95", "5 Frozen 07/02 11:45 95",
        "6 Frozen 07/05 12:30 95"]

master = Tk()

option = StringVar(master)
option.set(movieList[0]) # Set the first value to be the default option

w = apply(OptionMenu, (master, option) + tuple(movieList))
w.pack()

mainloop()

您可以通过调用get()方法来获取所选择的选项:
option.get()

嘿,那帮了我很多,除了我遇到了一个错误,元组索引必须是整数而不是字符串。 - Daniel Vaughan
我没有收到任何错误信息。你能提供一下你正在操作的数据吗?也许简单的类型转换就可以解决问题。 - sjaustirni
1
没关系,抱歉我编辑错了一些东西。这个很棒,谢谢! - Daniel Vaughan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接