【问题标题】:Get rid of brackets when displaying results from sql query in a list box (Tkinter and Python)在列表框中显示 sql 查询的结果时去掉括号(Tkinter 和 Python)
【发布时间】:2020-04-03 22:56:55
【问题描述】:

我正在构建一个应用程序,简单地说,人们将数据输入数据库,然后他们可以通过搜索来检索他们的数据。我在 python 中使用 sqlite 3 和 Tkinter 来构建这个程序。当我搜索数据并显示在 Tkinter 列表框中时,它显示为: {鲍勃·琼斯} name@email.com {约翰·琼斯}

如何在没有大括号的情况下显示查询?

后端代码:

def search(parent_email=""):
    conn=sqlite3.connect("parentsevening.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM bookings WHERE parent_email=? ORDER BY app_time", (parent_email,))
    rows=cur.fetchall()
    conn.close()
    return rows

前端代码:

def search_command():
    list1.delete(0,END)
    for row in parents_backend.search(parent_email.get()):
        list1.insert(END,row)

【问题讨论】:

  • 您使用SELECT * 并没有对表进行描述。我们如何猜测查询会返回什么?顺便说一句,它可以返回多行吗?
  • 列标题为:id |父名 |父母电子邮件 |学生姓名
  • 大括号是否在数据库字段内?
  • 不,它们只显示在列表框中

标签: python sqlite tkinter


【解决方案1】:

您将 python 列表插入到列表框中,但 insert 方法需要一个字符串。您负责在插入数据之前将数据转换为字符串。如果您没有明确进行转换,tkinter 将为您进行转换。这可能会在数据中产生括号,因为底层 tcl 解释器将使用自己的语法来保留原始数据的列表结构。

例如,如果您希望列表中的元素之间出现空格,您可以使用join:

list1.insert(END, " ".join(row))

【讨论】:

  • 谢谢。我已将代码更改为list1.insert(END,str(row)),它去掉了大括号,但现在它显示:(1, u'Name', u'name@email.com', u'NameOne')。所以摆脱了大括号,但现在它在整个查询和'u'上都有括号。
  • @ElisJD:是的,这就是str 对列表所做的事情。底线:您可以将列表转换为您希望在 UI 中看到的任何格式。
  • 您知道如何转换列表以显示以下值:id parent_name parent_email。 student_name 是那种格式的?
  • @ElisJD:我的回答向您展示了如何显示这些值。除了join,还有很多其他方式。例如,您可以使用字符串格式。这完全取决于您想看到什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2013-09-01
  • 2013-12-29
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多