Как мне избежать дублирования родителей в pysimple GUI tree (Tk tree?) - PullRequest
0 голосов
/ 03 августа 2020

Учитывая список строк с точечной нотацией, мне нужно расположить их в дереве pySiplmple GUI, но я не могу понять, как правильно отслеживать родителей. Например, если у меня есть 3 строки:

['a.1',
 'a.b.1',
 'a.b.2']
 

, я бы ожидал:

a
 |_
   1
 |_
   b
   |_
   | 1
   |_
     2

Я получаю

a
 |_
   1
a
 |_
   b
   |_
     1
a
 |_
   b
   |_
     2

Я бы подумал, что это будет используйте "a" как родительский для всего, но вместо этого каждая запись находится на своем собственном a-уровне. Но все буквы "a" имеют одинаковые ключи и используются как родительские для всех остальных записей. Мой отладчик показывает, что все они имеют один и тот же родительский элемент «а», так почему бы им не быть перечисленным под одним «а»?

Вывод отладчика

Вот код с еще несколькими случаями в списке для тестирования:

    #!/usr/bin/env python

import PySimpleGUI as sg

treedata = sg.TreeData()

sigs = ['a.1',
 'a.2',
 'a.3',
 'a.b.1',
 'a.b.2',
 'a.b.c.1',
 'a.b.c.4',
 'a.b.d.1',
 'a.b.d.5',
 'a.b.d.6']

for i, val in enumerate(sigs) :     
    separated = val.split(".") # creates list of dot-pathed names
    fullname = '' 
    for f in separated:
         parent=fullname
         if fullname =='':
             fullname=f
         else:
             fullname = fullname+'.'+f #rebuild the name step by step to use as the key
         
         treedata.insert(parent, fullname, f, values=[] );
    
 
layout = [[ sg.Text('File and folder browser Test') ],
          [ sg.Tree(data=treedata, headings=['col1', 'col2', 'col3'], auto_size_columns=True, num_rows=20, col0_width=30, key='_TREE_', show_expanded=False,),
            ],
          [ sg.Button('Ok'), sg.Button('Cancel')]]

window = sg.Window('Tree Element Test').Layout(layout)


while True:     # Event Loop
    event, values = window.Read()
    if event in (None, 'Cancel'):
        break
    print(event, values)

1 Ответ

0 голосов
/ 11 августа 2020

Я понял это, но просто нужно было немного узнать о github из pysimple gui. Решение с рабочим кодом: https://github.com/PySimpleGUI/PySimpleGUI/issues/1170#issuecomment -671657177

...