Qt 库中PyQt学习笔记之QTableWidget

移动开发
PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。

Qt库是这个星球上***大的之一,在更强大出现之前。PyQt是由Phil Thompson 开发。PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。

先看一下类的继承图:

PyQt学习笔记之QTableWidget

如上所示,QtableWidget是继承于QtableView的。所以QtableView的方法也在QtableWidget中继承了。

QTableWidget类提供了一个默认模式的表格,它是基于Item的,这个Item是由QTableWidgetItem提供的。如果你要构建自己的数据模式,请使用QTableView而不是QTableWidget。

一、如何构建一个QtableWidget

  1. # !/usr/bin/python  
  2. import sys  
  3. from PyQt4.QtGui import *  
  4. class TableWidget(QMainWindow):  
  5.     def __init__(self,parent=None):  
  6.         QWidget.__init__(self,parent)  
  7.         self.setWindowTitle('TableWidget')  
  8.         self.table = QTableWidget(10,6)  
  9.         self.setCentralWidget(self.table)  
  10. app = QApplication(sys.argv)  
  11. tb = TableWidget()  
  12. tb.show()  
  13. app.exec_() 

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

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

比如:

  1. self.table = QTableWidget()  
  2. self.table.setRowCount(10)  
  3. self.table.setColumnCount(6) 

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

PyQt学习笔记之QTableWidget 

#p#

二、添加表头。

可以添加水平和垂直表头,QtableWidget提供了两个方法来添加表头,非常方便。

  1. self.table = QTableWidget(5,7)  
  2.   self.table.setHorizontalHeaderLabels(['SUN','MON','TUE','WED',  
  3.                                               'THU','FIR','SAT']) 

上面两句就是添加水平表头。假如我们不添加表头,那么表头默认的数字就是代表所在

行或者所在列。

三、添加表项。

  1. self.newItem = QTableWidgetItem('Item')  
  2. self.table.setItem(1,2,self.newItem) 

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

PyQt学习笔记之QTableWidget

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

  1. self.table = QTableWidget(5,7)        
  2. self.table.setHorizontalHeaderLabels(['SUN','MON','TUE','WED',  
  3.                                               'THU','FIR','SAT'])  
  4.         for i in range(self.table.rowCount()):  
  5.             for j in range(self.table.columnCount()):  
  6.                 cnt = '(%d,%d)'% (i,j)  
  7.                 newItem = QTableWidgetItem(cnt)  
  8.                 self.table.setItem(i,j,newItem) 

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

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

结果如下:

PyQt学习笔记之QTableWidget 

#p#

四、修改表项内容

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()等来隐藏或显示特定行和列。

还有一个是否显示表头的问题,比如很多情况下我们只需要水平表头,不需要垂直表头,怎么办呢?我们在上面的例子中加上这么一句:

  1. self.table.verticalHeader().setVisible(False) 

setVisible是所有Qwidget都有的方法,而self.table.verticalHeader()是得到了一个表头,表头也是QheaderView继承来的,也是Qwidget的子类,所以也可以调用setVisible()方法来显示或者隐藏表头。

结果如下图:

PyQt学习笔记之QTableWidget

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

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

  1. self.table.setEditTriggers(QTableWidget.NoEditTriggers)  
  2.     self.table.setSelectionBehavior(QTableWidget.SelectRows)  
  3.     self.table.setSelectionMode(QTableWidget.SingleSelection)  
  4. self.table.setAlternatingRowColors(True) 

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

结果如下:

PyQt学习笔记之QTableWidget

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

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

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

【编辑推荐】

初识Python与Qt

新手须知 QT类大全

Qt 中Socket编程实例

在 Qt学习 QTableItem 类

QT中建立Python GUI应用程序

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-30 16:38:07

Qt QTableWidg

2011-08-30 13:33:29

Qt数据库

2011-07-04 13:17:18

Qt Designer 布局

2011-07-04 13:26:30

Qt Designer

2011-07-04 13:08:26

Qt Designer

2011-06-15 12:58:05

Qt QTableWidg

2011-08-30 12:59:52

Qt数据库

2011-09-07 16:36:00

Qt Widget

2011-07-01 10:03:52

QT 数据库

2011-06-22 11:09:01

QT 菜单 多线程

2011-08-29 10:01:27

QTWebkit插件

2011-09-09 17:24:39

Qt Webkit模块

2020-11-09 14:07:53

PyQtQt编程

2021-02-05 11:55:37

PythonWindows平台代码

2011-03-08 16:30:24

Proftpd

2011-03-08 16:30:40

Proftpd

2011-08-29 18:17:12

Oracle联合查询

2011-08-23 16:14:27

Lua函数库函数

2011-06-27 09:47:43

2011-08-25 11:08:21

Sybase数据库
点赞
收藏

51CTO技术栈公众号