PySimpleGUI 树无法插入数据到树中

0 投票
1 回答
15 浏览
提问于 2025-04-12 10:16

我在用PysimpleGUI做一个树形结构的时候,突然发现insert这个方法不再工作了。当我给它传一个装满数据的列表时,它就停止了。我几乎调试了所有相关的内容,发现insert这个函数自己也不再工作,无法往树形数据里添加任何东西。以下是代码:

import PySimpleGUI as sg
from services import HandlePacks

Cardpacks = HandlePacks()
card_packs = Cardpacks.get_packs()
treeData = sg.TreeData()
for pack_name, card_pack in card_packs:
    print("Adding pack:", pack_name)
    treeData.insert("", str(pack_name), str(pack_name), "", icon=None)
    for card in card_pack:
        card_name = card["name"]
        print("Adding card:", card_name)
        treeData.insert(str(pack_name), str(card_name), str(card_name), "", icon=None)
print(treeData)

sg.theme("LightGrey1")

tree = sg.Tree(
    treeData,
    font=("Helvetica", 16),
    col0_width=30,
    enable_events=True,
    show_expanded=False,
    key="-TREE-",
)

delete_button = sg.Button("Delete Pack", disabled=True)

layout = [
    [sg.Text("All your Packs:", font=("Calibri", 24))],
    [tree],
    [delete_button],
]

window = sg.Window("Memory Game", layout, size=(600, 500))

while True:
    event, values = window.read()
    if event in (None, "Exit"):
        break

    if event == "-TREE-":
        selected_item = values["-TREE-"]
        if selected_item:
            delete_button.update(disabled=False)
        else:
            delete_button.update(disabled=True)

    elif event == "Delete Pack":
        selected_item = values["-TREE-"][0]
        Cardpacks.delete_pack(selected_item)

    window.refresh()


window.close()

我尝试把Insert改成insert,但也没有用。任何帮助都非常感谢。

1 个回答

0

它没有告诉我们库 services 是什么,也许 card_packs 有什么问题,或者它是空的

我创建了一些基本数据,来展示它们是如何插入到 TreeData 中的,然后作为 Tree 元素的数据。

import PySimpleGUI as sg

kinds = {"Spades":"♠", "Hearts":"♥", "Diamonds":"♦", "Clubs":"♣"}
names = ["Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"]
card_packs = [[kind, [kinds[kind]+name for name in names]] for kind in kinds]

treeData = sg.TreeData()
for pack_name, card_pack in card_packs:
    treeData.insert("", str(pack_name), str(pack_name), [], icon=None)
    for card in card_pack:
        card_name = card
        treeData.insert(str(pack_name), str(card_name), str(card_name), [], icon=None)

sg.theme("LightGrey1")

tree = sg.Tree(
    treeData,
    font=("Helvetica", 16),
    col0_width=30,
    enable_events=True,
    show_expanded=True,
    key="-TREE-",
)
delete_button = sg.Button("Delete Pack", disabled=True)
layout = [
    [sg.Text("All your Packs:", font=("Calibri", 24))],
    [tree],
    [delete_button],
]
window = sg.Window("Memory Game", layout)

while True:

    event, values = window.read()

    if event == sg.WIN_CLOSED:
        break

window.close()

在这里输入图片描述

撰写回答