PyQt学习笔记(17)——QTableWidget

PyQt学习笔记(17)——QTableWidget

  (2010-03-11 00:10:50)
标签: 

python

 

pyqt

 

gui

 

qtabelwidget

分类: Python

     参考资料:Qt documentation online(因为这个帮助文档是基于C++做的,里面的语句是C++写的,不过因为PyQt做了很好的移植,方法的名称,参数等等基本都可以在python中套用)

先看一下类的继承图:

PyQt学习笔记(17)——QTableWidget

    如上所示,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')

        self.table = QTableWidget(10,6)

        self.setCentralWidget(self.table)

app = QApplication(sys.argv)

tb = TableWidget()

tb.show()

app.exec_()

结果如下图所示:创建了一个106列的表格,可编辑可输入。

初始化的时候也可以不设置行数和列数。而等到创建完了以后再设。

比如:

    self.table = QTableWidget()

    self.table.setRowCount(10)

    self.table.setColumnCount(6)

这样结果是跟上面一样的。

PyQt学习笔记(17)——QTableWidget

 

 

二,添加表头。

可以添加水平和垂直表头,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)

如下图:可以看出,行列数是指不算标题行,都是从第0行,或者第0列开始计数的。

PyQt学习笔记(17)——QTableWidget

 

下面我们通过循环来添加表项的所有内容:

self.table = QTableWidget(5,7)       

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)

QTableWidget.rowCount()是得到行数,int型。

QTableWidget.columnCount()是得到列数,int

结果如下:

 

 PyQt学习笔记(17)——QTableWidget

四,修改表项内容

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学习笔记(17)——QTableWidget

    因为继承关系,父类的很多方法都可以调用,所以QTableWidget的方法非常之多,应该有几百个,一一学习是不可能的,只能用到的时候去查。下面介绍几个继承于上面父类的方法。

QabstractItemView QTableWidget的父类的父类,他有下面几个方法,我们QTableWidget中经常调用,就是是否项目可编辑,点击选择是选择行,还是可以选择列,是可以选择多行(多列),还是只可以选择单行(单列),等等非常好用,如下的列子:

self.table.setEditTriggers(QTableWidget.NoEditTriggers)

    self.table.setSelectionBehavior(QTableWidget.SelectRows)

    self.table.setSelectionMode(QTableWidget.SingleSelection)

self.table.setAlternatingRowColors(True)

    第一句,设为不可编辑状态,第二是选择行,第三是选择单个行,第四是隔行改变颜色。

    结果如下:

PyQt学习笔记(17)——QTableWidget

 

不能编辑,不能选择一列或者单个项目,只能选择单一行。

    另外可以修改行宽高等大小信息,还有各行,列,等的颜色问题,带图标的标题等等美化措施,请参看documentation

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值