2012-05-23 3 views
3

Я пытаюсь распечатать содержимое QTableView на принтере. Я реализую нижний скрипт и запускаю его без ошибок. но все данные Необычные в printPreview. это pic от моей проблемы - FOUNTAINpyqt print preview QTableView

def printTable(self,printer,painter,area): 
    model = self.model 
    myTableView = self.view 
    printer = painter 
    rows = model.rowCount(); 
    columns = model.columnCount(); 
    totalWidth = 0.0; 
    totalPageHeight = 0.0; 
    totalHeight = 0.0; 
    for c in range(columns): 
     totalWidth += myTableView.columnWidth(c) 

    for p in range(45): 
     totalPageHeight += myTableView.rowHeight(p); 

    for r in range(rows): 
     totalHeight += myTableView.rowHeight(r); 

    xscale = area.width()/totalWidth; 
    yscale = area.height()/totalHeight; 
    pscale = area.height()/totalPageHeight; 
    painter.scale(xscale, pscale); 
    painter.translate(area.x() + xscale, area.y() + yscale); 

    x=0 
    #QStyleOptionViewItem option; 

    for r in range(rows): 
     ++x 
     for c in range(columns): 
      idx = model.index(r,c); 
      option = myTableView.viewOptions(); 
      option.rect = myTableView.visualRect(idx); 
      if r % 2 == 0: 
       brush= QtGui.QBrush(QtGui.QColor(220, 220, 220), QtCore.Qt.SolidPattern); 
       painter.fillRect(option.rect, brush); 
      myTableView.itemDelegate().paint(painter, option, idx); 

     if (x == 45): 
      ok = printer.newPage(); 
      x=0; 
      painter.translate(0, -1350); 

####################### Now print Table ###################### 

printer = QtGui.QPrinter() 
painter = QtGui.QPainter() 
painter.begin(printer) 
self.printTable(printer,painter, printer.pageRect()) 

, если у вас есть какие-либо пример, который может помочь мне, пожалуйста, сообщите мне. Большое вам спасибо

+0

'++ x' не делает то, что вы думаете в python. в основном он ничего не делает. другое, что трудно сказать без минимального рабочего примера. – mata

ответ

1

Если вы используете C++, я предлагаю использовать профессиональный инструмент отчетности. Возможные варианты: KDAB reporting tool и Nocisoft NC Report. AFAIK нет надежной библиотеки отчетов для PyQt ...

+0

Я согласен с общей мыслью, пытаясь очистить экран и изображение виджета - не очень хороший способ сделать это. Я уже использовал класс QTextDocument для такого рода вещей. генерация таблиц - это сложность, но вы можете легко экспортировать результат как HTML или PDF, а также распечатать его. –

Смежные вопросы