Ниже приведен код 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, спасибо за оперативный отзыв, пример приведен в моем вопросе выше.
@khelwood, есть что добавить с моей стороны? Спасибо
@PyiPath2022 PyiPath2022, можете ли вы предоставить трассировку по запросу Khelwood? Нам это как бы нужно ... не похоже, что у вас действительно есть что-то, вызывающее tree_dict во фрагменте кода, так что это может быть как-то связано с PySimpleGUI. В любом случае, нам нужна трассировка, полная вещь.
@AnonyMous Обновлено выше, пожалуйста, проверьте
@PyiPath2022 хорошо ... извините, что снова вас беспокою, но можете ли вы отредактировать это, но окружить трассировку тройными обратными кавычками (например, символ `)? При этом я думаю, что проблема связана с самим модулем, а не с вашим кодом. Может попробовать переустановить модуль.
@AnonyMous, без проблем. Сделанный
@PyiPath2022 Хорошо, поэтому я думаю, что проблема может быть связана с вашим вводом (может быть, строка 26? Или 20?), В противном случае это будет ошибка модуля. Не буду делать вид, что знаю этот модуль, но может у вас раскладка неправильная?
макет должен быть в порядке






Аргумент
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)],
]
Отличный!!! Как добавить «Добавить новый», «Удалить» и «Обновить»?
Кажется, макет в порядке, но невозможно получить данные из базы данных с помощью поля поиска.
Опять же, тип параметра values метода update — sg.TreeData, а не список. Отметьте tree_data = search_database(search_word), функция search_database возвращает список. Не существует метода для вставки/удаления/обновления элементов в Tree, вам нужно проверить структуру sg.TreeData для ваших требований или получить больше знаний о tkinter, чтобы узнать, как они работают.
Я предлагаю вам опубликовать минимальный воспроизводимый пример и полную трассировку стека исключения.