Преобразование QTreeWidge в PyQt в таблицу в ReportLab - PullRequest
1 голос
/ 12 января 2012

Поскольку таблицы в ReportLab кажутся слишком сложными, я пытаюсь определить способ простого добавления (предпочтительно через класс Paragraph, если возможно) двух отдельных текстов, один на левой стороне страницы, а другой направо.Столько, сколько я мог в Интернете, я не мог найти никакого видимого объяснения того, как это сделать.Так что, если это возможно, как ты это делаешь?

В конце я пытаюсь преобразовать данные из QTreeWidget в PyQT в PDF с похожим внешним видом.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 января 2012

Похоже, что это лучше всего сделать с помощью таблиц.Таким образом, хотя это будет запутанным, изучение структуры вложенных списков табличных данных было путь.Ключ для преобразования данных QTreeWidget проходит вдоль строк приведенных ниже кодов, так как вам нужно динамически добавлять как данные, так и стили ячеек, когда вы работаете с данными таблицы.

Предполагая, что композиция QTreeWidget - просто элементыс двумя столбцами текста (0 и 1), ниже работает.

from reportlab.lib.units import inch
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

pdf = SimpleDocTemplate("TreeWidgetPDF.pdf", pagesize = letter)
data = []
tStyle = []

for x in QTreeWidgetData.findItems("*", Qt.MatchWildcard, 0):
    project = str(x.text(0))
    data.append([project, x.text(1)])
    tStyle.append(('BACKGROUND', (0, cell), (1, cell), 'YELLOW'))
    tStyle.append(('FONTSIZE', (0, cell), (1, cell), 12))
    cell+=1

    for y in range(x.childCount()):
        data.append([str(x.child(y).text(0)), str(x.child(y).text(1))])
        tStyle.append(('ALIGN', (1, cell), (1, cell), 'RIGHT'))
        tStyle.append(('LEFTPADDING', (0, cell), (0, cell), 15))
        cell+=1

        for z in range(x.child(y).childCount()):
            data.append([x.child(y).child(z).text(0), x.child(y).child(z).text(1)])
            tStyle.append(('ALIGN', (1, cell), (1, cell), 'RIGHT'))
            tStyle.append(('LEFTPADDING', (0, cell), (0, cell), 30))
            cell+=1

        # And so on and so forth. You could probably iterate through this in a 
        # While loop so you don't have to manually nest your for statements.

parts = []
styledTable = Table(data, [6 * inch, 1 * inch, 0])
styledTable.setStyle(TableStyle(tStyle))
parts.append(table_with_style)
pdf.build(parts)
...