PyQt(Python+Qt)学习随笔:QStandardItemModel指定行和列创建模型中的项以及索引
2023-09-27 14:26:58 时间
一、引言
QStandardItemModel有两种构造方法:
- QStandardItemModel(QObject parent = None):直接创建一个模型实例,数据未进行初始化,可以通过setItem将QStandardItem的实例对象添加到模型中作为项。
- QStandardItemModel(int rows, int columns, QObject parent = None):直接创建一个模型实例,包含有rows行columns列的空项。这些项可以通过model的index方法获取后,通过QModelIndex的setData方法进行数据修改。当模型中存储实际数据少于指定的行或列时,多出部分显示空数据。
第一种方法因为项是逐项添加,并且在添加过程中构造了QStandardItem项,这个好理解。第二种方法直接指定行数和列数,是否就自动生成项了呢?我们来做个验证。
二、验证QStandardItemModel(int rows, int columns, QObject parent = None)是否存在项
2.1、验证步骤
2.1.1、创建指定行数和列数的QStandardItemModel模型并与视图关联
在视图的构造方法中添加创建模型的代码,示例语句:
self.model = QStandardItemModel(10, 3)
self.tableView.setModel(self.model)
此时运行代码,界面初始如下:
2.1.2、在界面视图创建一个鼠标双击的信号和槽的连接
在Designer中进入信号编辑界面创建信号和槽连接,如图:
2.1.3、在界面派生类中实现槽方法
为了观察相关项的情况,在槽方法中输出相关观察数据,示例代码:
def doubleClickView(self,index):
row,col = index.row(),index.column()
print(f"doubleClickView index info:\nindex={index},row,col={row},{col}")
self.showItemInf(row,col)
上述代码中index为鼠标双击信号传递过来的QModelIndex的项索引,指向Model中具体点击对应的项,该索引中包含项所在的行和列以及父节点等信息。方法showItemInf展示项相关的信息。具体实现代码如下:
def showItemInf(self,row,col):
item = self.model.item(row, col) #调用model的item方法获取项
if item:
itemData = item.data() #获取项对应的文本
itemIndex = item.index() #获取项对应的索引
else:
itemData = None
itemIndex = None
print(f"item={item},itemData={itemData},itemIndex={itemIndex}")
index = self.model.index(row,col) #调用model的index方法获取行和列对应项的索引
if index:indexData = index.data() #获取索引对应项的文本
else:indexData = None
print(f"index={index},indexData={indexData}")
2.1.4、运行代码,输出相关信息
运行后,鼠标双击视图中的项,如双击第1行第1列的项,上述代码输出如下信息:
doubleClickView index info:
index=<PyQt5.QtCore.QModelIndex object at 0x0000000003DB57B8>,row,col=0,0
item=None,itemData=None,itemIndex=None
index=<PyQt5.QtCore.QModelIndex object at 0x0000000003E5D128>,indexData=None
从上述输出信息可以得出如下结论:
- 鼠标双击传递的QModelIndex参数与通过行和列获取的QModelIndex实例不是同一个对象,但他们指向的数据相同
- 通过模型的item方法按指定行和列获取数据项,返回结果为None,即模型使用带行和列的参数创建后,实际上没有对应的项
- 虽然没有项,但模型索引并不为None,老猿认为这表明模型索引只是一个指向model中对应数据位置的索引,并不指向真正存储的数据,但应该在模型索引中包含指向对应项数据的信息,用于获取对应数据
老猿Python,跟老猿学Python!
相关文章
- [ Python - 4 ] python 装饰器
- Python爬虫——写出最简单的网页爬虫
- 用贝叶斯定理解决三门问题并用Python进行模拟(Bayes' Rule Monty Hall Problem Simulation Python)
- python接口自动化2-发送post请求详解(二)
- 如何运用Python建立你的第一个Slack聊天机器人?
- Python VIL Realse
- python-ansible
- Python_07-常用函数
- Python turtle可以用的颜色
- python opencv 斑点和直线检测
- Unity直接调用Python脚本
- QT python qt designer exe 路径
- python之迭代器
- 【python版CV】—图像基本操作
- PyQt(Python+Qt)学习随笔:QScrollArea的alignment属性不起作用的原因
- PyQt(Python+Qt)学习随笔:QTableWidget的构造方法
- PyQt(Python+Qt)学习随笔:树型部件QTreeWidget中使用sortItems进行项排序
- PyQt(Python+Qt)学习随笔:QTreeWidgetItem项中列数据的访问方法
- PyQt(Python+Qt)学习随笔:QListWidget对项进行排序的sortItems方法
- PyQt(Python+Qt)学习随笔:QListWidget获取当前选中项的selectedItems方法
- 第15.15节 PyQt(Python+Qt)入门学习:Designer的menu菜单、toolBar工具栏和Action动作详解
- PyQt(Python+Qt)学习随笔:Designer中PushButton按钮default、atuoDefault属性
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的enabled属性
- PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象的tabShape属性
- 第15.2节 PyCharm支持Python解释器的配置调整
- 第11.27节 Python正则小结:正则静,静则明,明则虚,虚则无为而无不为也
- 使用文件描述符作为Python内置函数open的file实参调用示例
- python - 实现带下标索引的遍历