PyQt学习笔记(12)--QTableWidget

   先看一下类的继承图:

PyQt学习笔记(12)--QTableWidget_第1张图片

   如上所示,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_()
    运行结果如下:

PyQt学习笔记(12)--QTableWidget_第2张图片

   
    初始化的时候也可以不设置行数和列数。而等到创建完了以后再设置。比如:
self.table = QTableWidget()
self.table.setRowCount(10)
self.table.setColumnCount(6)

二、添加表 
   可以添加水平和垂直表 ,QtableWidget提供了两个方法来添加表 ,非常方便。
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_()
    运行结果如下:
PyQt学习笔记(12)--QTableWidget_第3张图片

四、修改表项内容

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()方法来显示或者隐藏表头。

   结果如下:

PyQt学习笔记(12)--QTableWidget_第4张图片

你可能感兴趣的:(PyQt编程(python,GUI))