下表是Qt5.11提供的所有已经定义的事件类型常量及其含义说明(其中标蓝色的是老猿认为价值比较大的事件),事件的事件类型通过QEvent.type()来获取.由于老猿没有找到直接粘贴Excel表格的方法,粘贴后直接变成了图片,大家如果需要完整的表格,请通过资源<Qt事件列表.xlsx>下载. 博客地址:https://blog.csdn.net/LaoYuanPython 老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/de…
QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通过sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects对象. QObjects 对象通过调用 QObject.event() 函数接收事件,可以通过在子类中重写该函数来定义自己的事…
除了<PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查>介绍的Qt已经定义的事件外,Qt还支持自定义事件. 为了方便起见,可以使用 registerEventType()函数为应用程序注册和保留自定义事件类型.这样做可以避免意外地重新使用应用程序中其他地方已在使用的自定义事件类型. 用户自定义事件的值必须在QEvent.User事件到QEvent.MaxUser事件之间,其中QEvent.User事件的常量值为1000,QEvent.MaxUser事件的常量值为6553…
老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相关类的对象在Qt Designer中可以直接构建,但Model相关类的对象必须代码实现,那么怎么去构造Model相关的对象与View匹配呢? 其实Model构建的方法与View类别相关,但View类别并不是唯一确认Model构建方法的要素,还要看View中数据的内容.一般来说: 如果是多行单列的字符数据,可以…
老猿是按照<第15.5节 PyQt5安装与配置>步骤安装的PyQt及相关工具,但最近在Qt Designer中点击帮助相关菜单时报错找不到assistant.exe文件,如图: 按照报错信息查看相关目录:C:\Program Files\Python37\Lib\site-packages\pyqt5_tools\Qt\bin\bin,发现不存在该目录,但最后一个bin子目录去掉后的目录即C:\Program Files\Python37\Lib\site-packages\pyqt5_too…
PyQt程序通过调用QApplication类的exec_()(sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects对象. 在QApplication类中,真正负责事件分发处理的是QApplication类的notify方法(函数),该方法负责向接收者发送事件,返回接收事件对象的处理程序返回的值.请注意,对于发送到任何线程中的任何对象的所有事件,都会调用此方法. 对于…
按照<PyQt学习随笔:Model/View中设置视图数据项可编辑的方法>的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中,如果知道变化数据所在的行和列,就可以对该数据进行访问,访问方法是先通过行和列得到数据的Index,然后通过Index访问对应数据值.如: i = self.tableViewModel.index(1,1) d1 = i.data(Qt.DisplayRole) d2 = i.data(Qt.EditRole…
在<PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系>中介绍了,Model用于存储数据,View用于展现并接受用户操作.在实现时,Model和View的交互过程有如下几种: 1.初始化时,通过view类的setModel函数将View和Model进行关联: 2.在项目中,Model中的数据一般来源于数据源(如数据库.文件.消息等),由Model负责数据的读取.更新.增加和删除,数据变化后,会自动发dataCh…
在往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…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges返回选中矩形的列表,通过方法setRangeSelected将指定矩形范围的项选中或去选中.相关方法调用语法如下: list[QTableWidgetSelectionRange] selectedRanges() setRangeSelected( QTableWidgetSelectionRan…
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同步选择项,需要同步选择项的视图首先必须是数据共享的,然后再设置相互之间有相同的选择Model,即选择项的数据存储,则这些同步视图中的一个的数据项选择发生变化会同时引起选择项同步设置了的视图的选择项发生同样的变更. 如果要实现ViewA与ViewB的视图同步,只需要执行如下语句: ViewA.setSelect…
在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的实时变动. 但通过实际的应用实现后发现,变更后的数据如果要更新到后端的数据存储(如文件和数据库)中去时,意味着setData方法要实现后端数据存储的写入,为了保证数据访问的一致性及简洁性,意味着需要在自定义的Model类中实现后端数据存储数据的所有读写删除插入操作,否则自定义类中只实现更新,其他类中实现插入.…
eventFilter函数是直接从QObject继承的定义的事件刷选虚拟函数,如果一个对象A使用installEventFilter函数将另一个对象B安装了B的实例方法eventFilter,则这个对象B将会调用eventFilter进行事件刷选. 修订:上面这段话的描述有误,经过后期学习及测试,eventFilter方法无需是B本身的实例方法,只要是任何一个QObject派生类的eventFilter方法都可以,就是说,安装者.被监视对象以及eventFilter方法所在对象可以是三个独立对象…
在Qt Designer中的每个部件,除了设置部件的位置(geometry)之外,还可以指定部件的大小策略sizePolicy.部件的sizePolicy用于说明部件在布局管理中的缩放方式,当部件没有在布局管理器中时,该设置无效. 在理解sizePolicy前,建议参考<PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸.minimumSizeHint建议最小尺寸和minimumSize最小尺寸>先理解部件的缺省大小.建议最小尺寸.最小大小三…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget表格部件的表头包括水平表头和竖直表头,水平表头每节对应表格的一列,竖直表头对应表格的一行.如图: 上图中的"行"+编号的项就是竖直表头的一个项(也称为1节),"列"+编号的项就是水平表头的一个项(节). 1.设置水平表头的setHorizontalHeaderLabels方法 setHorizontalHeaderLabels用于一次性顺序设置…
最近三天,老猿都在使用PyCharm+QtDesigner工具,通过xlwings读取Excel的数据到TableView中显示的练习,本以为很容易的一件事,断断续续持续了三天时间才终于成功.在这个过程中,遇到了几个定位比较耗时实际上却比较简单的问题,在这儿总结出来供学习这方面内容的同好参考: 一.PyCharm并不能很好的完成语法检查,有时运行时突然终止,仔细核查却发现是基本的语法错误.建议遇到这种问题时,首先使用Python IDLE打开文件进行一次完整语法检查(菜单路径:run->Chec…
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在使用QTextBrowser用于记录输出日志,并接管了标准输出后,对于某些Python模块输出的反映处理进度的提示内容,在pycharm中显示为一行,但在自己的日志文件中显示为N多行.为此分析了一下这些特殊的日志信息,发现是使用'\r'为开头的字符串,即输出不换行但回到行首.为此要做QTextEdit和QTextBrowser实现类似的效果,可以…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidgetItem项的方法setSizeHint用于设置项的sizeHint属性,Qt自带材料中介绍sizeHint为项的缺省大小,如果没有设置则根据项的数据自动计算项的大小.但老猿试了好久都没明白sizeHint的作用,查阅资料也没有找到相关资料,最终经过2天的反复测试和摸索,终于明白了这个属性的作用. QTableWidgetItem的sizeHint在项对应QHeadView表…
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在学习QTableWidgetItem的sizeHint()方法时,Qt自带材料中介绍sizeHint为项的缺省大小,如果没有设置则根据项的数据自动计算项的大小.但老猿试了好久都没明白sizeHint的作用,查阅资料也没有找到相关资料,最终经过2天的反复测试和摸索,终于明白了这个属性的作用. QTableWidgetItem的sizeHint在项对应QHeadView表头的sectionResiz…
在PyQt中,如果要捕获键盘事件的具体按键,可以通过重写组件对象的keyPressEvent方法或event方法来捕获具体的按键,推荐使用keyPressEvent方法,因为event方法是一个通用事件,如果要处理键盘事件需要增加单独的判断,并影响其他事件的响应处理速度. 语法: keyPressEvent(self,event) 其中: event类型为QKeyEvent,该类型是从QInputEvent继承,而QInputEvent是从QEvent继承. 该方法没有返回值. 获取按键值的方法…
在PyQt的组件对象中,都有从QWidget中继承的方法event,而QWidget.event是对QObject类定义的虚拟方法event的实现. event方法的语法: bool event(QEvent e) event方法用于接收发给一个对象的事件,如果事件被识别并处理应该返回True,对于没有被应用识别和处理的事件,需要调用父类的event方法以保证事件的正确处理. 注意: 1.该方法中只能捕获确认是发给对应对象的事件,不能捕获通过该对象转发给上级的事件: 2.通过重写该方法可以捕获对…
Qt中Model/View中的Model Index是一个类,该类用于定位Model/View中数据模型中的数据. Model Index是从QAbstractItemModel派生的子类,用于在项视图( item views).委托(delegates)和选择模型( selection models)使用来定位Model中的数据项(delegates相当于MVC中的C,用于在视图中处理用户的输入,输入可以通过调用model的setData函数保存到真正的数据中). 模型索引引用模型中的数据项,…
在PyQt中,QWidget类对应基础的窗口组件,如果要在窗口组件关闭时截获关闭事件,提供自己的控制机制,则可以通过在自定义的派生类中重写closeEvent方法. 重写closeEvent方法的语法如下: def closeEvent(self,event): 在重写代码中可以选择接受事件还是忽略事件,接受则只需窗口关闭,忽略则窗口保持不变. 案例: from PyQt5.QtWidgets import QMessageBox,QApplication from PyQt5 import Q…
在界面程序开发中,数据的展示主要包括表格.简单列表.树状列表以及纯文本等多种方式,在Qt中将界面表格.简单列表.树状列表称为"表项视图类(item view class)",并提供了两种实现方式,一种叫item based,这些类名以widget结尾,如QListWidget等.另一种叫model based,这些类以view结尾,如QListView等,对应QtDesigner控件的Item Views(Model-Based)和Item Widgets(Item-Based)这两类…
在Qt Designer的Edit菜单下有个Edit Buddies(编辑伙伴关系)子菜单,该菜单的作用是将一个Label与其他控件关联起来,当Label控件设置了快捷键时,通过Label的快捷键就可以直接使关联控件获得焦点.操作步骤如下: 1.通过在标签文本中使用"&字母"给标签设置快捷键,对应快捷键为:Alt+字母: 2.选择标签,点击Edit Buddies子菜单,或先点击Edit Buddies子菜单再选择标签后,单击这个标签并把红色箭头拖到对应要关联的控件上,释放鼠标…
View相关类类继承关系: Model相关类类继承关系:…
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 引言 在Designer中,QWidget的font属性有两个比较陌生的属性:kerning和Antialiasing,如图: kerning属性 kerning属性用于控制字体在输出时是否启用kerning控制,启用kerning控制用于调整字符间距,且基本上是英文字符形状的间距,因为英文字符形状都是不规则的,有宽有窄,有的圆乎乎,有的棱角分明,就会导致排列在一起的…
少侠们,今天我们继续来搞一搞TS 今天我们要来看一看TS中数组的定义是个什么鬼样子 数组的类型: 在 TypeScript 中,数组类型有多种定义方式,比较灵活.下面我们来看看有哪些定义方法 「类型 + 方括号」表示法: 最简单的方法是使用「类型 + 方括号」来表示数组: let tsArray: number[] = [,,,,] 数组中的项中不允许出现其他类型 let fibonacci: number[] = [, , , ]; // index.ts(1,5): error TS2322…
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 如果使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例方法中定义,否则后面发射信号和连接槽方法时都会报错. 案例: class configWin(ui_configWin.Ui_configWin,QtWidgets.QWidget): def __init__(self,parent=None): super().__init__(parent)…