Skip to content

[ Question] Update treedata by myself Move and Delete methods, but something wrong when Tree shown #2514

Description

@jason990420

Type of Issues (Enhancement, Error, Bug, Question)

Create treedata for Tree element, and use myself methods for Move and Delete of nodes.
It show wrong result after Update and Refresh.

  1. old treedata List1 [Book1, Book2], List2 [Book3, Book4], List3
  2. delete Book2
  3. Move List2 to under Book1
  4. Tree show List1 [Book1], List2[Book3, Book4], List3
  5. new treedata List1[Book1[List2[Book3, Book4]]], List3

Not sure why Tree view different with new treedata ? It seems delete and move working on treedata. Is there anythin wrong for update ?

Operating System

Win10

Python version

Python 3.8.1

PySimpleGUI Port and Version

PySimpleGUI 4.15.1

Your Experience Levels In Months or Years

1_ Python programming experience
20 Programming experience overall
tkinter Have used another Python GUI Framework (tkiner, Qt, etc) previously (yes/no is fine)?

You have completed these steps:

  • Read instructions on how to file an Issue
  • Searched through main docs http://www.PySimpleGUI.org for your problem
  • Searched through the readme for your specific port if not PySimpleGUI (Qt, WX, Remi)
  • Looked for Demo Programs that are similar to your goal http://www.PySimpleGUI.com
  • Note that there are also Demo Programs under each port on GitHub
  • Run your program outside of your debugger (from a command line)
  • Searched through Issues (open and closed) to see if already reported

Code or partial code causing the problem

import PySimpleGUI as sg


class Tree_Data(sg.TreeData):

    def __init__(self):
        super().__init__()

    def move(self, key1, key2):
        if key1 == '':
            return False
        node = self.tree_dict[key1]
        parent1_node = self.tree_dict[node.parent]
        parent1_node.children.remove(node)
        parent2_node = self.tree_dict[key2]
        parent2_node.children.append(node)
        return True

    def delete(self, key):
        if key == '':
            return False
        node = self.tree_dict[key]
        key_list = [key, ]
        parent_node = self.tree_dict[node.parent]
        parent_node.children.remove(node)
        while key_list != []:
            temp = []
            for item in key_list:
                temp += self.tree_dict[item].children
                del self.tree_dict[item]
            key_list = temp
        return True


def Button(Key):

    return sg.Button(button_text=Key, target=Key, enable_events=True,
                     file_types=(('All Python files', '*.py')),
                     size=(10,1), font=Font)


def Text(Key):

    return sg.Text('', size=(50,1), auto_size_text=False, font=Font, key=Key)


def Tree(treedata):

    return sg.Tree(
        data=treedata,
        headings=['Notes',],
        visible_column_map=[False,],
        col0_width=50,
        auto_size_columns=False,
        select_mode=sg.TABLE_SELECT_MODE_BROWSE,
        show_expanded=False,
        enable_events=False,
        font=Font,
        num_rows=25,
        row_height=32,
        pad=(0, 0),
        key='Tree',
        right_click_menu=['Right',['Rename', 'Move', 'Delete']])


Font = 'Courier 20'

treedata = Tree_Data()
treedata.Insert('', 'List1', 'List1', values=[])
treedata.Insert('', 'List2', 'List2', values=[])
treedata.Insert('', 'List3', 'List3', values=[])
treedata.Insert('List1', 'Book1', 'Book1', values=[])
treedata.Insert('List1', 'Book2', 'Book2', values=[])
treedata.Insert('List2', 'Book3', 'Book3', values=[])
treedata.Insert('List2', 'Book4', 'Book4', values=[])

Layout = [[Button('Update'), Button('Quit')],
          [Tree(treedata),Text('Text')]]

Window = sg.Window('Python Book', layout=Layout, font=Font, finalize=True)

Window['Tree'].Widget.configure(show='tree')

print('Original treedata:\n',treedata)

while True:

    Event, Values = Window.read()

    if Event == None or Event == 'Quit':
        break

    elif Event == 'Update':
        result1 = treedata.delete('Book2')
        print('Result of Delete: ', result1)
        result2 = treedata.move('List2', 'Book1')
        print('Result of Move: ', result2)
        print('New treedata:\n',treedata)
        Window['Tree'].Update(values=treedata)
        Window.Refresh()

Window.close()

image
image

Original treedata:
  : root
    List1 : List1
        Book1 : Book1
        Book2 : Book2
    List2 : List2
        Book3 : Book3
        Book4 : Book4
    List3 : List3

Result of Delete:  True
Result of Move:  True

New treedata:
  : root
    List1 : List1
        Book1 : Book1
            List2 : List2
                Book3 : Book3
                Book4 : Book4
    List3 : List3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions