Показать содержание с помощью sg.Tree () в PySimpleGUI - PullRequest
0 голосов
/ 09 мая 2020

Я хочу показать Оглавление PDF-файла, поскольку я создаю PDFViewer, используя PySimple GUI. Я не знаю, есть ли другой вариант, который я могу использовать для создания оглавления, кроме TreeData().

Мое оглавление - это вложенный список, и он выглядит примерно так:

[1, 'Cover', 1]
[1, 'PART ONE OVERVIEW', 25]
[2, 'Chapter 1 Introduction', 27]
[3, '1.1 What Operating Systems Do', 28]
[3, '1.2 Computer-System Organization', 31]
[3, '1.3 Computer-System Architecture', 36]
[2, 'Chapter 2 Operating-System Structures', 79]
[3, '2.1 Operating-System Services', 79]
[3, '2.2 User and Operating-System Interface', 82]
[3, '2.3 System Calls', 86]
[1, 'PART TWO PROCESS MANAGEMENT', 127]
[2, 'Chapter 3 Processes', 129]
[3, '3.1 Process Concept', 129]

Теперь я не могу понять, как пролистать oop через этот список и разместить все, где должно быть. Например, данный список должен выглядеть примерно так:

Cover
PART ONE OVERVIEW
    Chapter 1 Introduction
        1.1 What Operating Systems Do
        1.2 Computer-System Organization
        1.3 Computer-System Architecture
    Chapter 2 Operating-System Structures
        2.1 Operating-System Services
        ....

1 Ответ

0 голосов
/ 17 мая 2020

С помощью рекурсии мне удалось достичь своей цели. Я делюсь этой функцией, чтобы будущие посетители сразу получили решение.

def create_toc(self, contents, parent, phead):
    cons = iter(contents)
    for content in cons:
        i = contents.index(content)
        head, text = content[0], content[1]

        if head == phead:
            i += 1
            key = ''.join(text.split())
            self.TOC_tree.insert(parent, key, text, content[2])
        else:
            j = i
            while True:
                j += 1
                if j < len(contents) and contents[j][0] != phead:
                    next(cons, None)
                else:
                    break
            self.create_toc(contents[i:j], key, head)

Сначала вам нужно создать объект sg.TreeData(), а затем вставить в него Node. Первый вызов этой функции будет таким:

create_toc(toc, "", toc[0][0])
...