目的是从我的 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())
这就是我得到的:
但这就是我想要的:
我不知道如何解决它。如果有任何想法,我将非常感激。
您可以通过添加width:100%和table-layout:fixed的CSS样式来使嵌入表格填充父单元格。解决办法如下:
添加宽度:100%;表格布局:固定;主要和嵌入式 桌子以确保它们伸展以填满容器。
设置嵌入表格中的列宽以均匀分配空间。
这是更新后的代码片段:
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%;}
'''
这应该扩展嵌入表格以完全填充父单元格。