Search code examples
pythontreepysimplegui

PySimpleGUI tree doesn't Insert data into tree


I have been working on this tree in PysimpleGUI, suddenly the insert method decides to stop working when I give it a list full of data. I debugged nearly everything about it, the function insert itself stopped working or adding anything to tree data. Here is code

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()

I tried changing it from Insert to insert and it didn't help. Any help would be appreciated.


Solution

  • It didn't show us what the library services is, maybe there's something wrong for the card_packs, or it's empty.

    I create a basic data to show how them inserted into the TreeData, then as the data of Tree element.

    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()
    

    enter image description here