2011-11-27 134 views
2

如何在QTextEdit中插入要在A4纸上打印的表格。我写了这个代码,但我不知道我可以将其插入值,只需插入第一个单元格:使用PyQt4将表格插入QTextEdit

self.text = QtGui.QTextEdit() 
self.cursor = QtGui.QTextCursor() 
self.cursor = self.text.textCursor() 
self.cursor.insertTable(2, 5) 
self.cursor.insertText("first cell ") 

回答

0

你需要移动QTextCursor的位置。看看QTextCursor.movePositionQTextCursor.MoveOperation中的操作。

这应该为你做的工作:

self.cursor.movePosition(QTextCursor.NextCell) 
self.cursor.insertText("second cell") 
+0

非常感谢,如果我需要合并两列,我可以做什么,我尝试使用此代码self.table = QTextTable()self.cursor.insertTable(2,5,表),当我运行它时,没有发生任何事情,如果我不使QTextTable它工作良好,但我需要合并单元格我可以做到这一点,而不使QTextTable? –

0

也许晚了,但仍然可以为别人:) 有两个不错的选择如何将表格插入的QTextEdit有用。

第一个,如上所述,是与光标的手段。 例子:

headers = ["Number", "Name", "Surname"] 
rows = [["1", "Maik", "Mustermann"], 
     ["2", "Tom", "Jerry"], 
     ["3", "Jonny", "Brown"]] 
cursor = results_text.textCursor() 
cursor.insertTable(len(rows) + 1, len(headers)) 
for header in headers: 
    cursor.insertText(header) 
    cursor.movePosition(QTextCursor.NextCell) 
for row in rows: 
    for value in row: 
     cursor.insertText(str(value)) 
     cursor.movePosition(QTextCursor.NextCell) 

然后结果看起来像以下: enter image description here

也有另一种方式做到这一点,并获得更漂亮的结果。使用Jinja2的包,如示例:

headers = ["Number", "Name", "Surname"] 
rows = [["1", "Maik", "Mustermann"], 
     ["2", "Tom", "Jerry"], 
     ["3", "Jonny", "Brown"]] 

from jinja2 import Template 
table = """ 
<style> 
table { 
    font-family: arial, sans-serif; 
    border-collapse: collapse; 
    width: 100%; 
} 

td, th { 
    border: 1px solid #dddddd; 
    text-align: center; 
    padding: 8px; 
} 
</style> 

<table border="1" width="100%"> 
    <tr>{% for header in headers %}<th>{{header}}</th>{% endfor %}</tr> 
    {% for row in rows %}<tr> 
     {% for element in row %}<td> 
      {{element}} 
     </td>{% endfor %} 
    </tr>{% endfor %} 
</table> 
""" 
results_text.setText(Template(table).render(headers=headers, rows=rows)) 

你得到那么样式表,因为在接下来的画面: enter image description here