先看一下类的继承图:
如上所示,QtableWidget是继承于QtableView的。所以QtableView的方法也在 QtableWidget中继承了。
QTableWidget类提供了一个默认模式的表格,它是基于Item的,这个 Item是由QTableWidgetItem提供的。如果你要 建自己的数据模式,请使用 QTableView而不是 QTableWidget。
一、构建一个 QtableWidget
# !/usr/bin/python
import sys
from PyQt4.QtGui import *
class TableWidget(QMainWindow):
def __init__(self,parent=None):
QWidget.__init__(self,parent)
self.setWindowTitle('TableWidget')
#创建一个10行6列的表格部件
self.table = QTableWidget(10,6)
#讲表格设置为主窗口的主部件
self.setCentralWidget(self.table)
app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
tb = TableWidget()
tb.show()
app.exec_()
运行结果如下:
self.table = QTableWidget()
self.table.setRowCount(10)
self.table.setColumnCount(6)
self.table = QTableWidget(5,7)
self.table.setHorizontalHeaderLabels(['SUN','MON','TUE','WED',
'THU','FIR','SAT'])
上面两句就是添加水平表 。假如我们不添加表 ,那么表头默认的数字就是代表所在行或者所在列。
self.newItem = QTableWidgetItem('Item')
self.table.setItem(1,2,self.newItem)
# !/usr/bin/python
import sys
from PyQt4.QtGui import *
class TableWidget(QMainWindow):
def __init__(self,parent=None):
QWidget.__init__(self,parent)
self.setWindowTitle('TableWidget')
self.table = QTableWidget(5,7)
self.table.verticalHeader().setVisible(False)
self.table.setHorizontalHeaderLabels(['SUN','MON','TUE','WED',
'THU','FIR','SAT'])
for i in range(self.table.rowCount()):
for j in range(self.table.columnCount()):
cnt = '(%d,%d)'% (i,j)
newItem = QTableWidgetItem(cnt)
self.table.setItem(i,j,newItem)
self.setCentralWidget(self.table)
app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
tb = TableWidget()
tb.show()
app.exec_()
运行结果如下:
QTableWidget.clear(self):清除所有表项及表QTableWidget.clearContents(self):只清除表项,不清除表 。QTableWidget.insertColumn(self, int column):在某一列插入新的一列。QTableWidget.insertRow(self, int row):在某一行插入新的一行。QTableWidget.removeColumn(self, int column):清除column列及其内容。QTableWidget.removeRow(self, int row):清除第 row行及其内容。
五、关于显示的一些题外话
QTableView.setShowGrid (self, bool show)是从TableView继承而来的,是否显示表格的横线,默认情况下是显示的,如上面的例子,如果设为setShowGrid(False),则不显示分割线,横竖都没有。
另外,还可以通过 hideRow(),hideColumn(),showRow(),showColumn()等来隐藏或显示特定行和列。还有一个是否显示表头的问题,比如很多情况下我们只需要水平表 ,不需要垂直表 ,怎么办呢?我们可以在上面的例子中加上这么一句:
self.table.verticalHeader().setVisible(False)
setVisible是所有Qwidget都有的方法,而self.table.verticalHeader()是得到了一个表 头,表头也是QheaderView继承来的,也是Qwidget的子类,所以也可以调用setVisible()方法来显示或者隐藏表头。
结果如下: