pyqt 打印预览 QTableView

Posted

技术标签:

【中文标题】pyqt 打印预览 QTableView【英文标题】:pyqt print preview QTableView 【发布时间】:2012-05-23 01:03:41 【问题描述】:

我正在尝试将 QTableView 的内容打印到打印机。我实现了底部脚本,它运行成功,没有任何错误。但所有数据在 printPreview 中都是不寻常的。这是我的问题中的pic -FOUNTAIN

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())

如果您有任何可以帮助我的示例,请告诉我。非常感谢

【问题讨论】:

++x 不会按照你在 python 中的想法去做。基本上它什么都不做。除此之外,如果没有一个最小的工作示例就很难说。 【参考方案1】:

如果您使用的是 C++,我建议您使用专业的报告工具。可用选项为KDAB reporting tool 和Nocisoft NC Report。 AFAIK 没有可靠的 PyQt 报告库...

【讨论】:

我同意一般观点,尝试对小部件进行屏幕抓取和图像并不是解决此问题的好方法。我以前使用过 QTextDocument 类来处理此类事情.生成表格是一件苦差事,但您可以非常轻松地将输出导出为 html 或 PDF 并打印出来。

以上是关于pyqt 打印预览 QTableView的主要内容,如果未能解决你的问题,请参考以下文章

python3 PyQt5 运行后界面控件缩在左上角,但在QTdesigner里面预览是正常的?

如何使用QPrinter和QPrintPreviewDialog

根据从导入包中打印的标准输出更新 PyQt 进度条(PyQt5)

如何在 PyQt5 中横向打印?

PyQt 打印 QWidget

vfp报表打印出现打印预览不一致的情况