第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的做用及属性详解

1、概述

在Designer的部件栏Item Views中提供了PyQt和Qt已经实现好的table View(表视图)部件,table View对应的类为QTableView,QTableView类提供表视图的默认Model/View实现。这儿的所说的表视图老猿理解为相似经过行和列定位数据的表格形式的数据展示方式。html

QTableView是PyQt和Qt提供的一种表视图的实现,用于显示存储在Model模型中的数据项。QTableView类是Model/View类之一,是QtModel/View框架的一部分。python

QTableView实现QAbstractItemView类定义的接口,以便于在视图中显示从QAbstractItemModel类派生的Model模型提供的数据。web

在QTableView对应视图中,能够经过用鼠标单击单元格或使用箭头键来在表格中的数据之间切换。由于QTableView在默认状况下启用tabKeyNavigation属性,因此可使用Tab和Backtab键在单元格之间先后移动。数据库

QTableView对应视图能够显示垂直表头(相似列名)和水平表头(相似行标题),能够根据须要对表头进行隐藏或展现。框架

2、QTableView属性介绍

2.一、Designer中QTableView相关的属性

在Designer中Item Views中的table View的属性只有showGrid、gridStyle、sortingEnabled、wordWrap、cornerButtonEnbaled以及Header这些属性,如图:
在这里插入图片描述ide

2.二、showGrid属性

showGrid属性用于控制视图中数据项之间是否显示网格,若是该属性为True,则绘制网格;若是该属性为False,则不绘制网格。svg

showGrid属性默认值为True,能够经过showGrid() 和setShowGrid(bool show)来访问或设置该属性。学习

2.三、gridStyle属性

gridStyle属性用于控制视图数据网格的样式,此属性只有在showGrid属性为True时才有做用。
gridStyle属性的类型为枚举类型Qt.PenStyle,其取值及含义以下:
在这里插入图片描述字体

相关线条示例在这里插入图片描述
相关方法

可使用gridStyle() 、setGridStyle(Qt.PenStyle style)方法访问或设置gridStyle属性。.net

2.三、sortingEnabled属性

sortingEnabled属性用于控制是否启用视图按列排序功能,若是此属性为True,则对tableView视图中的数据启用排序,若是此属性为False,则不启用排序。默认值为False。

当启用排序后,在视图的表头中排序列升序排序则有正三角形标记,倒序则有倒三角标记,如图:
在这里插入图片描述
当点击表头的其余列时,则排序以点击列进行从新排序。如图之内容字段倒序排序:
在这里插入图片描述
能够经过方法isSortingEnabled()、setSortingEnabled(bool enable)对该属性进行访问和设置。

2.四、wordWrap属性

wordWrap属性用于控制视图中数据项文本的换行策略。若是此属性为True,则在数据项文本中分词的适当处进行换;不然数据项文本不进行换行处理。默认状况下,此属性为True。

请注意,即便启用了换行,单元格也不会展开以适合全部文本,若是数据项的空间没法展现全部内容,则会根据textElideMode设定的省略号模式在文本中插入省略号。

该属性能够经过wordWrap()和setWordWrap(bool wordWrap)来进行访问和设置。

2.五、cornerButtonEnabled属性

cornerButtonEnabled属性用于控制是否启用左上角的按钮。若是此属性为True,则启用视图左上角的按钮,单击此按钮将选择表视图中的全部数据,不然此按钮点击没有任何做用。

默认状况下,此属性为True。能够经过isCornerButtonEnabled() 、setCornerButtonEnabled(bool enable)来访问和设置此属性。

如图:
在这里插入图片描述
在cornerButtonEnabled为True的状况下,点击上图蓝色标记的视图左上角按钮则会将视图中全部数据选中。

2.六、标题表头相关属性

2.6.一、概述

在Qt Designer中,对于表视图QTableView,在属性在下面有专门一栏列出了跟标题相关的属性,如图:
在这里插入图片描述
这些属性并非QTableView的直接属性,而是QTableView的horizontalHeader和verticalHeader两个属性的子属性。

2.6.二、horizontalHeader和verticalHeader

horizontalHeader和verticalHeader分别表示视图数据项的水平标题(或称为水平表头,对应个列名)和垂直标题(或称为垂直表头,对应各行标题),水平标题表示每列的标题如字段名,垂直标题表示每行的标题如行号。

horizontalHeader和verticalHeader分别经过QTableView的horizontalHeader()和verticalHeader()方法获取,返回类型为QHeaderView类型,能够经过QTableView的方法setVerticalHeader(QHeaderView header)、setHorizontalHeader(QHeaderView header)来设置。

2.6.三、Qt Designer标题属性与QHeaderView对应关系

2.6.3.一、horizontalHeaderVisible和verticalHeaderVisible

这两个属性都对应QHeaderView的visible属性,表示标题是否可见,该属性其实是从QWidget继承过来的属性,能够经过isVisible()、setVisible(bool visible)进行访问。

2.6.3.二、horizontalCascadingSectionResizes和verticalCascadingSectionResizes属性

horizontalCascadingSectionResizes和verticalCascadingSectionResizes这两个属性都对应QHeaderView的CascadingSectionResizes属性,
CascadingSectionResizes属性用于控制当用户调整标题的区域(sections)大小达到其最小值时,是否将交互式大小调整级联到下一区域。关于这个属性你们能够参考《PyQt(Python+Qt)学习随笔:QHeaderView的CascadingSectionResizes属性》相关的介绍。

2.6.3.三、horizontalHeaderDefaultSectionSize和verticalHeaderDefaultSectionSize属性

horizontalHeaderDefaultSectionSize和verticalHeaderDefaultSectionSize这两个属性都对应QHeaderView的defaultSectionSize属性,defaultSectionSize用于控制标题头各字段区域的在重写调整大小以前的默认大小。

注意:defaultSectionSize这个属性的值仅对大小调整模式resizeMode设置为 Interactive 或 Fixed时有效。

默认状况下,此属性的值依赖于样式。所以,当样式更改时,此属性将同时根据样式的设置更新。当代码调用setDefaultSectionSize()后,此属性就再也不受样式的影响,而调用resetDefaultSectionSize()将恢复根据样式的设置更新。

可使用方法defaultSectionSize()、setDefaultSectionSize(int size)来访问和设置该属性的值。

2.6.3.四、horizontalHeaderHighlightSections和verticalHeaderHighlightSections属性

horizontalHeaderHighlightSections和verticalHeaderHighlightSections这两个属性对应QHeaderView的highlightSections属性,highlightSections属性用于控制当选择了tableView视图中数据项时,对应的表头区域是否高亮。

能够经过方法highlightSections() 、setHighlightSections(bool highlight)来访问或设置该属性相关的值。

2.6.3.五、horizontalHeaderMinimumSectionSize和verticalHeaderMinimumSectionSize属性

horizontalHeaderMinimumSectionSize和verticalHeaderMinimumSectionSize这两个属性对应QHeaderView的minimumSectionSize属性,该属性用于控制表头各字段区域的最小大小。

minimumSectionSize是容许的最小尺寸,若是设置为-1,QHeaderView将使用globalStrut(globalStrut是用于控制全部界面交互元素的最小大小)的最大值或fontMetrics(fontMetrics为当前部件字体对应的字符或字符串大小的计算度量数据,如baseline(基线)、width、asent(超出基线的高度)、decent(基线之下的高度))指定的大小。

minimumSectionSize属性的设置对全部大小调整模式都有效。

2.6.3.六、horizontalHeaderShowSortIndicator和verticalHeaderShowSortIndicator属性

horizontalHeaderShowSortIndicator和verticalHeaderShowSortIndicator这两个属性对应QHeaderView的showSortIndicator属性,showSortIndicator属性用于控制表头是否显示排序标记。排序标记会显示在当前点击选择的标题字段上。

注意在排序标记显示属性showSortIndicator为True的状况下

  1. 在首次显示视图时,默认显示在第一列和第一行的标题上,但此时若是应用数据未进行排序处理,实际显示数据是按数据生成顺序显示;
  2. 当点击水平标题时,就会按点击字段对视图数据排序显示,再次点击就会反序显示;
  3. 当点击竖直标题时,排序标记会变化,但视图中的数据无变化,若是须要变化,应用须要进行调整。

以上状况是老猿验证的状况,最后一点是否正确老猿暂时不能彻底确认。

showSortIndicator属性能够经过方法isSortIndicatorShown() 、setSortIndicatorShown(bool show)进行访问或设置。

2.6.3.七、horizontalHeaderStretchLastSection和verticalHeaderStretchLastSection属性

horizontalHeaderStretchLastSection和verticalHeaderStretchLastSection这两个属性对应QHeaderView的stretchLastSection属性,stretchLastSection属性用于控制最后一个显示的表头是否占用视图中全部可用空间。

stretchLastSection属性默认值为False,能够经过stretchLastSection()、setStretchLastSection(bool stretch)方法进行访问和设置。

通常状况下,只有水平表头才须要设置该属性,竖直表头也能够设置该属性,而且在视图中数据行数很少时会拉伸最后一行数据占用整个视图的空间,但并无多少实际意义。

3、小结

本节详细介绍了QTableView对应的表视图在Designer中相关的属性的含义及访问方法,并介绍了表视图总体的功能和做用。整体来讲表视图就是相似展示表格数据的视图,它能够和存储为关系型数据库中的表、excel表格中的数据对应Model配合使用。表格能够设置行名、列名、行高、列高,能够设置是否展现网格以及网格的线条是什么形状等相关的外观。

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只须要9.9元,该部分与第十五章的内容基本对应,但一样内容在付费专栏上整体来讲更详细、案例更多。本节内容在付费专栏的《第十九章、Model/View开发:QTableView的功能及属性》。若是有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!