2012-01-11 3 views
1

ReportLabではテーブルがほとんど複雑すぎるように見えるので、私は単純に(可能であればParagraphクラスを通して)2つの別々のテキストを追加する方法を決定しようとしています。ページの左側と右側に表示されます。私がインターネットでできる限り、私はこれを達成する方法のように思われる説明を見つけることができませんでした。それが可能であれば、どうやってそれをするのですか?PyTtのQTreeWidgeをReportLabのテーブルに変換する

私は、PyQTのQTreeWidgetからのデータを同様のルックアンドフィールでPDFに変換することをやめようとしています。

ありがとうございます!

答えて

0

これを達成することは、テーブルを介して行うことが最もよいと思われます。だからこそ畳み込まれているにもかかわらず、テーブルデータのネストされたリストの構造を習得するのが最善の方法でした。 QTreeWidgetデータを変換するためのキーは、以下のコードの行に沿っています。テーブルデータを操作する際に、データとセルのスタイリングの両方を動的に追加する必要があるからです。

QTreeWidgetの構成が単純に2列のテキスト(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) 
関連する問題