在 PyQt6 中打印 HTML 表格

问题描述 投票:0回答:1

目的是从我的 PyQt6 应用程序打印 QTableWidget。

它确实有效,但有一个小问题:我在主表中嵌入了表格,我希望这些表格完全填充父单元格(其宽度的 100%),但子表不会扩展。

这是我的代码:

import sys
from PyQt6 import QtWidgets, QtPrintSupport
from PyQt6.QtGui import QTextDocument


class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.table_widget = QtWidgets.QTableWidget()
        self.button = QtWidgets.QPushButton('Print TableWidget')
        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.table_widget)
        self.layout.addWidget(self.button)
        self.button.clicked.connect(self.print_table)

    def print_table(self):
        html_table = '''<table cellpadding="0">
                          <tr><th>header1</th><th>header2</th><th>header3</th></tr>
                          <tr><td>data1</td><td>data2</td>
                            <td><table>
                                <tr><th>header1</th><th>header2</th><th>header3</th></tr>
                                <tr><td>data3</td><td>data3</td><td>data3</td></tr>
                              </table></td></tr>
                          <tr><td>data1</td><td>data2</td>
                            <td><table>
                                <tr><th>hr1</th><th>hr2</th><th>hr3</th><th>hr4</th></tr>
                                <tr><td>d3</td><td>d3</td><td>d3</td><td>d3</td></tr>
                                <tr><td>d3</td><td>d3</td><td>d3</td><td>d3</td></tr>
                              </table></td></tr>
                        </table>'''

        style_sheet = '''table {border-collapse:collapse; width:100%}
                            th {background-color:lightblue; border: 1px solid gray; height:1em}
                            td {border: 1px solid gray; padding:0; vertical-align:top}                                
                            '''
        text_doc = QTextDocument()
        text_doc.setDefaultStyleSheet(style_sheet)
        text_doc.setHtml(html_table)
        prev_dialog = QtPrintSupport.QPrintPreviewDialog()
        prev_dialog.paintRequested.connect(text_doc.print)
        prev_dialog.exec()

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    widget = MyWidget()
    widget.resize(640,480)
    widget.show()
    sys.exit(app.exec())

这就是我得到的:

enter image description here

但这就是我想要的:

enter image description here

我不知道如何解决它。如果有任何想法,我将非常感激。

python html printing pyqt6
1个回答
0
投票

您可以通过添加width:100%table-layout:fixed的CSS样式来使嵌入表格填充父单元格。解决办法如下:

  1. 添加宽度:100%;表格布局:固定;主要和嵌入式 桌子以确保它们伸展以填满容器。

  2. 设置嵌入表格中的列宽以均匀分配空间。

这是更新后的代码片段:

style_sheet = '''table {border-collapse:collapse; width:100%; table-layout: fixed;}
            th {background-color:lightblue; border: 1px solid gray; height:1em}
            td {border: 1px solid gray; padding:0; vertical-align:top}
            td > table {width: 100%; table-layout: fixed;}
            td > table th, td > table td {width: 25%;}
            '''

这应该扩展嵌入表格以完全填充父单元格。

© www.soinside.com 2019 - 2024. All rights reserved.