PySimpleGUI多语言词典报错:'list'无'tree_dict'属性,如何修复?
多语言词典PySimpleGUI代码报错修复方案
运行多语言词典的PySimpleGUI代码时出现以下报错:
AttributeError: 'list' object has no attribute 'tree_dict'
报错原因
PySimpleGUI的sg.Tree组件要求初始化时传入**sg.TreeData类型的对象**作为data参数,而非普通列表。原代码中用空列表[]作为初始data,导致组件在初始化过程中尝试访问列表不存在的tree_dict属性,触发错误。此外,后续更新Tree内容时直接传入二维列表的方式也不符合Tree组件的数据格式要求。
修复步骤
- 初始化Tree组件时,用
sg.TreeData()替代空列表作为data参数 - 将数据库查询结果转换为
TreeData格式的节点数据,更新Tree时传入该对象
修改后的完整代码
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 - 使用sg.TreeData()初始化Tree的data layout = [[sg.Text('Enter word to search: '), sg.InputText(key='search'), sg.Button('Search')], [sg.Tree(data=sg.TreeData(), 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并转换为TreeData格式 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() # 初始化TreeData对象 tree_data = sg.TreeData() for row in results: # 将每行数据添加为Tree的节点(row[0]作为节点唯一key,row[1:]作为显示内容) tree_data.Insert('', row[0], row[1], row[1:]) return tree_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) # 更新Tree组件,传入TreeData对象 window['treeview'].update(tree_data=tree_data) # Close PySimpleGUI window and SQLite database connection conn.close() window.close()
关键修改说明
- 初始化Tree时用
sg.TreeData()替代空列表,匹配组件要求的数据格式 search_database函数中通过tree_data.Insert()方法构建节点数据,确保每个条目符合Tree组件的结构要求- 更新Tree内容时调用
update(tree_data=tree_data),替换原代码中错误的values参数传递方式
内容的提问来源于stack exchange,提问作者PyiPath2022
相关产品推荐
相关产品推荐

