Учитывая список строк с точечной нотацией, мне нужно расположить их в дереве 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)