You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:45:19