AttributeError: объект «список» не имеет атрибута «tree_dict» в PySimpleGUI

Ниже приведен код PySimpleGUI для создания многоязычного словаря, в который я могу добавлять записи для каждого слова на разных языках, а также иметь возможность поиска по языку. К сожалению, я получил следующую ошибку:

AttributeError: объект «список» не имеет атрибута «tree_dict»

Как я могу это исправить?

import sqlite3
import PySimpleGUI as sg

# Create connection to SQLite database
conn = sqlite3.connect('Data_Enteries.db')
c = conn.cursor()

# Create table if it doesn't exist
c.execute('''CREATE TABLE IF NOT EXISTS dictionary
             (id INTEGER PRIMARY KEY,
              English TEXT,
              French TEXT,
              Spanish TEXT,
              Chinese TEXT,
              Swedish TEXT,
              Turkish TEXT)''')
conn.commit()

# Create PySimpleGUI layout
layout = [[sg.Text('Enter word to search: '), sg.InputText(key='search'), 
           sg.Button('Search')],
          [sg.Tree(data=[], headings=['English', 'French', 'Spanish', 'Chinese', 'Swedish', 
            'Turkish'], key='treeview', col_widths=[20]*6)]]

# Create PySimpleGUI window
window = sg.Window('Multilanguage Dictionary', layout)

# Function to retrieve data from database
def search_database(word):
    # Execute SELECT query
    c.execute('''SELECT * FROM dictionary
                 WHERE English = ? OR
                       French = ? OR
                       Spanish = ? OR
                       Chinese = ? OR
                       Swedish = ? OR
                       Turkish = ?''', (word, word, word, word, word, word))
    results = c.fetchall()
    # Convert results to PySimpleGUI treeview data format
    data = []
    for row in results:
        data.append([row[1], row[2], row[3], row[4], row[5], row[6]])
    return data

# Loop to handle PySimpleGUI events
while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    if event == 'Search':
        search_word = values['search']
        tree_data = search_database(search_word)
        window['treeview'].update(values=tree_data)

# Close PySimpleGUI window and SQLite database connection
conn.close()
window.close()

Выслеживать:

C:\UsersUserName\Desktop>MultiLangPSG.py
Traceback (most recent call last):
  File "C:\UsersUserName\Desktop\MultiLangPSG.py", line 47, in <module>
    event, values = window.read()
                    ^^^^^^^^^^^^^
  File "C:\UsersUserName\AppData\Local\Programs\Python\Python311\Lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 10075, in read
    results = self._read(timeout=timeout, timeout_key=timeout_key)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\UsersUserName\AppData\Local\Programs\Python\Python311\Lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 10146, in _read
    self._Show()
  File "C:\UsersUserName\AppData\Local\Programs\Python\Python311\Lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 9886, in _Show
    StartupTK(self)
  File "C:\UsersUserName\AppData\Local\Programs\Python\Python311\Lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 16866, in StartupTK
    _convert_window_to_tk(window)
  File "C:\UsersUserName\AppData\Local\Programs\Python\Python311\Lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 16753, in _convert_window_to_tk
    PackFormIntoFrame(window, master, window)
  File "C:\UsersUserName\AppData\Local\Programs\Python\Python311\Lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 16402, in PackFormIntoFrame
    for key, node in element.TreeData.tree_dict.items():
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'tree_dict'

Я предлагаю вам опубликовать минимальный воспроизводимый пример и полную трассировку стека исключения.

khelwood 14.04.2023 13:13

@khelwood, спасибо за оперативный отзыв, пример приведен в моем вопросе выше.

PyiPath2022 14.04.2023 13:17

@khelwood, есть что добавить с моей стороны? Спасибо

PyiPath2022 14.04.2023 13:27

@PyiPath2022 PyiPath2022, можете ли вы предоставить трассировку по запросу Khelwood? Нам это как бы нужно ... не похоже, что у вас действительно есть что-то, вызывающее tree_dict во фрагменте кода, так что это может быть как-то связано с PySimpleGUI. В любом случае, нам нужна трассировка, полная вещь.

Anony Mous 14.04.2023 13:30

@AnonyMous Обновлено выше, пожалуйста, проверьте

PyiPath2022 14.04.2023 13:35

@PyiPath2022 хорошо ... извините, что снова вас беспокою, но можете ли вы отредактировать это, но окружить трассировку тройными обратными кавычками (например, символ `)? При этом я думаю, что проблема связана с самим модулем, а не с вашим кодом. Может попробовать переустановить модуль.

Anony Mous 14.04.2023 13:46

@AnonyMous, без проблем. Сделанный

PyiPath2022 14.04.2023 13:48

@PyiPath2022 Хорошо, поэтому я думаю, что проблема может быть связана с вашим вводом (может быть, строка 26? Или 20?), В противном случае это будет ошибка модуля. Не буду делать вид, что знаю этот модуль, но может у вас раскладка неправильная?

Anony Mous 14.04.2023 13:51

макет должен быть в порядке

PyiPath2022 14.04.2023 13:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
9
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Аргумент data в sg.Tree

Данные, представленные с помощью PySimpleGUI, предоставили класс TreeData.

тип данных: (TreeData)

Демонстрационный код

treedata = sg.TreeData()
layout = [
    [sg.Text('Enter word to search: '),
     sg.InputText(key='search'),
     sg.Button('Search')],
    [sg.Tree(data=treedata, headings=['English', 'French', 'Spanish', 'Chinese', 'Swedish','Turkish'], key='treeview', col_widths=[20]*6)],
]

Отличный!!! Как добавить «Добавить новый», «Удалить» и «Обновить»?

PyiPath2022 14.04.2023 14:51

Кажется, макет в порядке, но невозможно получить данные из базы данных с помощью поля поиска.

PyiPath2022 14.04.2023 15:26

Опять же, тип параметра values метода updatesg.TreeData, а не список. Отметьте tree_data = search_database(search_word), функция search_database возвращает список. Не существует метода для вставки/удаления/обновления элементов в Tree, вам нужно проверить структуру sg.TreeData для ваших требований или получить больше знаний о tkinter, чтобы узнать, как они работают.

Jason Yang 14.04.2023 15:37

Другие вопросы по теме

Похожие вопросы

(РЕШЕНО) Python запускает несуществующий код в VS Code
Почему аутконвертер не вызывается для преобразования байтов в oracledb/cx_Oracle (Python)?
Ошибка при поиске спецификации модуля для «spyder_kernels.console» (ModuleNotFoundError: нет модуля с именем «spyder_kernels»)
Как преобразовать исходный список в другой, который учитывает последовательность минимальных и максимальных значений для каждого элемента исходного списка?
Как переписать sql-функцию row_number() для оконных полярностей python?
Передать адрес памяти в multiprocessing.Process вне его контекста памяти
Как интерпретировать сообщение об ошибке «Foo() не принимает аргументов» при указании экземпляра класса в качестве базового класса?
Сортировка списка точек в соответствии с другим списком для создания прямых линий без каких-либо пересечений
Как настроить бессерверный пул sql, чтобы использовать его с базовыми интерфейсами SQL, такими как pyodbc или RODBC?
Импорт matplotlib завершается неудачно, если перед ним не импортируется pyqtgraph