在视图对象中调用setEditTriggers方法可以设置视图对象中的数据项是否可编辑以及编辑的触发方法. setEditTriggers方法是QAbstractItemView的方法,语法如下: setEditTriggers(QAbstractItemView.EditTriggers triggers) 其中参数QAbstractItemView.EditTriggers triggers为QAbstractItemView定义的触发方式常量,对应常量及含义如下: 例如,要对应用中定义的一…
按照<PyQt学习随笔:Model/View中设置视图数据项可编辑的方法>的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中,如果知道变化数据所在的行和列,就可以对该数据进行访问,访问方法是先通过行和列得到数据的Index,然后通过Index访问对应数据值.如: i = self.tableViewModel.index(1,1) d1 = i.data(Qt.DisplayRole) d2 = i.data(Qt.EditRole…
老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相关类的对象在Qt Designer中可以直接构建,但Model相关类的对象必须代码实现,那么怎么去构造Model相关的对象与View匹配呢? 其实Model构建的方法与View类别相关,但View类别并不是唯一确认Model构建方法的要素,还要看View中数据的内容.一般来说: 如果是多行单列的字符数据,可以…
Qt中Model/View中的Model Index是一个类,该类用于定位Model/View中数据模型中的数据. Model Index是从QAbstractItemModel派生的子类,用于在项视图( item views).委托(delegates)和选择模型( selection models)使用来定位Model中的数据项(delegates相当于MVC中的C,用于在视图中处理用户的输入,输入可以通过调用model的setData函数保存到真正的数据中). 模型索引引用模型中的数据项,…
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButtons标准按钮>. 除了标准按钮,QDialogButtonBox允许增加自定义按钮.如果要在标准按钮之外增加自定义按钮,可以使用addButton方法. 案例 在Qt Designer中定义了一个名为buttonBox的QDialogButtonBox,在其下选择定义了所有标准按钮,如图: 该界面生成代码…
View相关类类继承关系: Model相关类类继承关系:…
在界面程序开发中,数据的展示主要包括表格.简单列表.树状列表以及纯文本等多种方式,在Qt中将界面表格.简单列表.树状列表称为"表项视图类(item view class)",并提供了两种实现方式,一种叫item based,这些类名以widget结尾,如QListWidget等.另一种叫model based,这些类以view结尾,如QListView等,对应QtDesigner控件的Item Views(Model-Based)和Item Widgets(Item-Based)这两类…
eventFilter函数是直接从QObject继承的定义的事件刷选虚拟函数,如果一个对象A使用installEventFilter函数将另一个对象B安装了B的实例方法eventFilter,则这个对象B将会调用eventFilter进行事件刷选. 修订:上面这段话的描述有误,经过后期学习及测试,eventFilter方法无需是B本身的实例方法,只要是任何一个QObject派生类的eventFilter方法都可以,就是说,安装者.被监视对象以及eventFilter方法所在对象可以是三个独立对象…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeWidget的itemAt方法通过视口内的坐标点获取对应坐标位置的项,相关调用方法如下: QTreeWidgetItem itemAt( QPoint p) QTreeWidgetItem itemAt(int x, int y) 通过该方法可以获取到视口上对应坐标所在的项,如果对应坐标位置无项则返回None. 示例: 以下代码输出树型部件视口范围内的所有项首列文本: def showA…
通过currentIndex()可以获取listView控件的当前选择元素,如果选择了多个,则可以通过selectedIndexes()来获取选择的元素,不过这两个函数返回的是元素数据,而不是索引编号,如果要取到索引顺序号,需要通过row()函数. 案例(m_ListView为listView控件名,displaySelected为一个TextBrowser控件名,itemmodel为列表项的数据存储名): def DisplayItem(self): selected = self.m_Lis…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 树部件(Tree Widget)是Qt Designer中 Item Widgets(Item-Based)部件中提供的一个Model/View便利部件,对应类为QTreeWidget类. QTreeWidget类从QTreeView派生(继承关系请参考<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>),是一个Model/View便利类,提供一个树状管理数据的界面…
在<PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系>中介绍了,Model用于存储数据,View用于展现并接受用户操作.在实现时,Model和View的交互过程有如下几种: 1.初始化时,通过view类的setModel函数将View和Model进行关联: 2.在项目中,Model中的数据一般来源于数据源(如数据库.文件.消息等),由Model负责数据的读取.更新.增加和删除,数据变化后,会自动发dataCh…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关系.由该体系架构引入的功能分离使得开发人员能够更灵活地定制展现数据项的呈现方式,并提供标准模型接口支持广泛的数据源与预定义好的项视图(item views)一起使用. 二.Model/View架构概述 2.1.引言 模型-视图-控制器(Model-View-Controller,简称MVC)是一种源…
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同步选择项,需要同步选择项的视图首先必须是数据共享的,然后再设置相互之间有相同的选择Model,即选择项的数据存储,则这些同步视图中的一个的数据项选择发生变化会同时引起选择项同步设置了的视图的选择项发生同样的变更. 如果要实现ViewA与ViewB的视图同步,只需要执行如下语句: ViewA.setSelect…
在往Model中通过QStandardItem等类插入数据项时,除了实际插入的存储数据,还可以设置不同角色(请参考<PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义>)的数据到数据项中,这样可以对数据项设置诸如是否有可勾选.对齐方式等角色数据. 可参考如下代码: newitem = QStandardItem(data) #print(f"line[col]={line[col]},newitem={newitem},data={newitem.te…
根据<PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法>可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意,setData方法调用不光发生在View中实际存储的内部数据修改,也可能是其他与数据相关的属性或值调整,如数据项的checked变化,数据的对齐风格变化等. 因此如果应用需要响应数据的变化实时做出反应而重写setData时,需要判断setData的数据变化的角色,具体来说就是setData方法的参数role…
对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据发生更新后视图用于更新Model数据的方法,只要重写该方法就可以截获视图对Model数据的修改. 不过网上介绍的思路都是从QAbstractTableModel派生出一个自己的Model类,并实现相关方法,比较复杂.老猿还需要仔细研究这种方法的详细方式及优缺点,相关文章大部分都是基于Qt实现的,懂C…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 列表部件(List Widget)对应类QListWidget,是从QListView派生的类,用于显示一些数据的列表,不支持多层级数据的显示.QListWidget显示的数据项都通过QListWidgetItem构建. QListWidget是一个便利类,它提供了一个类似于QListView提供的列表视图,具有一个用于添加和删除项的接口.QListWidget使用一个内部模型来管理列表…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 表格部件为应用程序提供标准的表格显示工具,在表格内可以管理基于行和列的数据项,表格中的最大数据项数为总行数和总列数的乘积,另外在表格中可以设置水平和垂直标题. 表格部件对应类为QTableWidget ,QTableWidget 表格部件中的项类型为QTableWidgetItem类.QTableWidget 从QTableView派生的子类,内置默认模型,如果表格展现的应用需要使用自己…
在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的实时变动. 但通过实际的应用实现后发现,变更后的数据如果要更新到后端的数据存储(如文件和数据库)中去时,意味着setData方法要实现后端数据存储的写入,为了保证数据访问的一致性及简洁性,意味着需要在自定义的Model类中实现后端数据存储数据的所有读写删除插入操作,否则自定义类中只实现更新,其他类中实现插入.…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属性>及公开博文<第15.24节 PyQt(Python+Qt)入门学习:Model/View架构中QTableView的作用及属性详解>中介绍了QTableView的主要功能及属性,本节来使用QTableView与QStandardItemModel配套来开发一个简单的Excel文件展示程序…
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的accepted.rejected和helpRequested信号>介绍了这些按钮中有部分会产生相同的accepted或rejected信号,有部分不会产生accepted或rejected信号,那么怎么确认点击了按钮只能通过clicked信号. 二.…
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButtons标准按钮>. 这些标准按钮的显示文字Qt已经缺省内置了,如果要改变这些文字,可以通过按钮的setText方法,但在改变前需要通过button方法找到需要修改的按钮. 案例 在Qt Designer中定义了一个名为buttonBox的QDialogButtonBox,在其下选择定义了所有标准按钮,如图:…
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的accepted.rejected和helpRequested信号>介绍了这些按钮中有部分会产生相同的accepted或rejected信号,有部分不会产生accepted或rejected信号,那么怎么确认点击了按钮只能通过clicked信号. 在&…
在Qt Designer中,可以在界面中使用QDialogButtonBox来配置一组按钮进行操作,Qt中为QDialogButtonBox定义了一组常用的标准按钮,可以在Designer中直接在StandardButtons属性中指定使用,配置界面如图: StandardButtons标准按钮属性与枚举类型QDialogButtonBox.StandardButton类型相对应,具体取值及含义如下: 其中的按钮角色ButtonRole的含义及用途请参考<PyQt(Python+Qt)学习随笔:…
☞ ░ 前往老猿Python博文目录 ░ 在前面老猿的文章中,<Python学习随笔:使用xlwings读取和操作Excel文件>.<Python学习随笔:使用xlwings读取和操作Excel文件的数字需要注意的问题>.<第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战–使用QTableView展示Excel文件内容>.<第二十章.QTableView与QStandardItemModel开发实战:展示Excel文件内容>…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget部件中的QTableWidgetItem项数据可以通过项的data( int role) 方法获取项中指定列指定角色的数据,也可以通过setData(int role, QVariant value)方法设置指定角色的数据为value.例如项的文本可以通过data方法和setData方法使用Qt.DisplayRole.Qt.EditRole这两种角色去访问. 关于数据的角…
QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通过sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects对象. QObjects 对象通过调用 QObject.event() 函数接收事件,可以通过在子类中重写该函数来定义自己的事…
Model/View(模型/视图)结构是 Qt 中用界面组件显示与编辑数据的一种结构,视图(View)是显示和编辑数据的界面组件,模型(Model)是视图与原始数据之间的接口. GUI 应用程序的一个很重要的功能是由用户在界面上编辑和修改数据,典型的如数据库应用程序.数据库应用程序中,用户在界面上执行各种操作,实际上是修改了界面组件所关联的数据库内的数据. 将界面组件与所编辑的数据分离开来,又通过数据源的方式连接起来,是处理界面与数据的一种较好的方式.Qt 使用 Model/View 结构来处理…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges返回选中矩形的列表,通过方法setRangeSelected将指定矩形范围的项选中或去选中.相关方法调用语法如下: list[QTableWidgetSelectionRange] selectedRanges() setRangeSelected( QTableWidgetSelectionRan…