Почему я не могу вставить cursor.fetchall () в текстовый виджет? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь вставить текст в текстовый виджет от tkinter.Когда я помещаю cursor.fetchall() в аргумент, я получаю сообщение об ошибке:

Исключение в обратном вызове Tkinter (последний последний вызов):
Файл "C: \ Users \ lmaor \ AppData \ Local\ Programs \ Python \ Python37-32 \ lib \ tkinter__init __. Py ", строка 1705, в call return self.func (* args) Файл" C: \ Users \ lmaor \ Desktop \ Database \ ComputerShop Database ".py ", строка 54, в showCustomers txtTerminal.insert (END," "+ cursor.fetchall () +" \ n ") TypeError: может объединять только str (не" list ") в str

Я пытался использовать cursor.fetchall() без "\ n", поэтому нет прикрепленной строки, но он просто отображается как ничто.

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», она показываетas

'Клиенты: [(1,' Джон ',' Смит ')]'

Это то, что я хочу текствнутри txtTerminal выглядит, вместо этого я получаю либо ошибку, либо ничего.

1 Ответ

0 голосов
/ 21 июня 2019

Поскольку результатом является кортеж внутри списка (в основном это двумерный набор), он не будет вставлять целые значения кортежа в текстовый виджет.

Попробуйте это:

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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...