Qt 库中PyQt学习笔记之QTableWidget
创始人
2024-07-31 19:00:46
0

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应用程序

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...