为什么不能将cursor.fetchall()插入文本小部件?

时间:2019-06-20 23:27:53

标签: python sqlite tkinter

我正在尝试从tkinter将文本插入文本小部件。当我将cursor.fetchall()放入参数时,我得到了错误:

  

Tkinter回调Traceback中的异常(最近一次调用最后一次):
  文件   “ C:\ Users \ lmaor \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ tkinter__init __。py”,   第1705行,在致电       返回self.func(* args)文件“ C:\ Users \ lmaor \ Desktop \ Database \ ComputerShop Database.py”,第54行   在showCustomers       txtTerminal.insert(END,“” + cursor.fetchall()+“ \ n”)TypeError:只能将str(而非“ list”)连接到str

我尝试使用不带“ \ n”的cursor.fetchall(),因此没有附加任何字符串,但它只是显示为空。

txtTerminal是一个tkinter文本小部件 showCustomers()通过名为btnShowCustomers的按钮激活

该功能应该在表中打印所有客户的完整列表

def showCustomers():
    print(" ")
    print("Customers:")
    cursor.execute("SELECT * FROM tblCustomers")
    print(cursor.fetchall())
    txtTerminal.config(state = NORMAL)
    txtTerminal.insert(END, " " + cursor.fetchall() + "\n")
    txtTerminal.config(state = DISABLED)

将结果打印在“ Python 3.7.2 Shell”中时,显示为

  

“客户:[(1,'约翰','史密斯')]'

这是我希望txtTerminal中的文本看起来像的样子,相反,我得到的是错误或什么都没有。

1 个答案:

答案 0 :(得分:0)

结果是列表中的元组(基本上是二维集),因此不会在文本小部件中插入整个元组值。

尝试一下:

def showCustomers():
     print(" ")
     print("Customers:")
     cursor.execute("SELECT * FROM tblCustomers")
     print(cursor.fetchall())
     txtTerminal.config(state = NORMAL)
     for line in cursor.fetchall():
         for data in line:
              txtTerminal.insert(END, " " + data + "\n")
     txtTerminal.config(state = DISABLED)

我更改的主要内容是插入机制,即

for line in cursor.fetchall():
         for data in line:
              txtTerminal.insert(END, " " + data + "\n")

它将列表中的第一个元组作为“行”,然后从“行”中将一个值作为“数据”。 最后,它将把这些数据插入到文本小部件中。

随时提出问题或是否出现错误。

到那时,Ciao!