PyQT-在QTableWidget中对单元格进行分组

时间:2018-08-27 09:08:44

标签: python-2.7 pyqt

我正在搜索如何在QTableWidget中创建诸如HTML表之类的标头,诸如此类:enter image description here

我可以在QTextEdit(在单元格中包含图像的HTML表)中进行创建,但是我需要这样的自定义单元格:

enter image description here

因此QTextEdit不适合此。有没有可能,如果可以,我如何创建它?也许不是QTableWidget,我只需要带有自定义单元格和自定义标题的可编辑表。

我所看到的只是插入一个大页眉图像并根据该图像设置所有列,但是如何创建其中包含一个单元格的一行?

enter image description here

1 个答案:

答案 0 :(得分:1)

  

QTableView.setSpan(行,列,行跨度,列跨度)

     

参数:
   行– PySide.QtCore.int
   列– PySide.QtCore.int
   rowSpan – PySide.QtCore.int
   columnSpan – PySide.QtCore.int

     

将(row,column)处的表格元素的跨度设置为(rowSpanCount,columnSpanCount)指定的行数和列数。

import sys
from PyQt5.QtWidgets import (QWidget, QTableWidget, QHBoxLayout, QApplication, QTableWidgetItem )
from PyQt5.QtGui     import QBrush, QColor #,  QFont 

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QTableWidget - Example of a cell merge")
        self.resize(660,300 );
        conLayout = QHBoxLayout()

        tableWidget = QTableWidget()
        tableWidget.setRowCount(7)
        tableWidget.setColumnCount(6)
        conLayout.addWidget(tableWidget)

        # Hide headers
        tableWidget.horizontalHeader().setVisible(False)
        tableWidget.verticalHeader().setVisible(False)

        #tableWidget.setHorizontalHeaderLabels(['Column1','Column1','Column1'])  

        # Sets the span of the table element at (row , column ) to the number of rows 
        # and columns specified by (rowSpanCount , columnSpanCount ).
        tableWidget.setSpan(0, 0, 1, 6) 
        newItem = QTableWidgetItem("tableWidget.setSpan(0, 0, 1, 6)")  
        tableWidget.setItem(0, 0, newItem) 

        tableWidget.setSpan(3, 0, 3, 1)   
        newItem = QTableWidgetItem("tableWidget.setSpan(3, 0, 3, 1)")  
        tableWidget.setItem(3, 0, newItem)  

        newItem = QTableWidgetItem("Hello")  
        newItem.setForeground(QBrush(QColor(0, 255, 0)))
        tableWidget.setItem(3, 1, newItem)  

        newItem = QTableWidgetItem("pythoff") 
        newItem.setForeground(QBrush(QColor(255, 0, 0)))        
        tableWidget.setItem(3, 2, newItem)   

        self.setLayout(conLayout)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    example = Table()  
    example.show()   
    sys.exit(app.exec_())

enter image description here