PyQt学习随笔:使用PyCharm+PyQt开发遇到的坑
最近三天,老猿都在使用PyCharm+QtDesigner工具,通过xlwings读取Excel的数据到TableView中显示的练习,本以为很容易的一件事,断断续续持续了三天时间才终于成功。在这个过程中,遇到了几个定位比较耗时实际上却比较简单的问题,在这儿总结出来供学习这方面内容的同好参考:
一、PyCharm并不能很好的完成语法检查,有时运行时突然终止,仔细核查却发现是基本的语法错误。建议遇到这种问题时,首先使用Python IDLE打开文件进行一次完整语法检查(菜单路径:run->Check Module)。
修订:关于这个说法第二天老猿就发现不正确,PyCharm是有代码检测功能的。具体请大家参考:Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量
二、使用PyQt后,有些和PyQt相关的开发代码出现异常后程序直接退出,并没有抛出任何异常,使用IDLE环境执行同样如此。解决这个问题老猿没有找到很好的解决办法,只有3个笨办法:
1、一个是逐行调试,看代码退出位置再检查该行或其下一行是否存在异常因素。例如有次老猿读取的Excel文件中存在空行,处理数据时没有判断数据有效性,导致处理到该行数据时程序异常终止,为了核查这个问题就去了半天,因为才开始根本不知道在哪个代码处退出的,数据处理轨迹才开始也没有记录,也不知道处理到哪退出的,反复修改代码,加调试输出信息才最终发现就是空行的原因;
2、给通过第三方模块处理输出的数据加有效性判断,特别是是否为None,减少出错的概率;
3、对关键处理代码增加异常处理,截获异常自己输出信息。
三、注意类的成员方法特别是槽函数是否加了self参数,老猿这次有个槽函数定义时忘记加self参数,执行到调用该函数前一行程序就异常终止,也是查了半天,最后才发现问题;
四、注意界面输入对象获取的数据都是文本字符串,如果要用作其他类型时一定要转换类型。这次读取Excel文件时,在界面上指定读取文件的sheet名或序号,当输入序号时应该以数字去获取sheet,但代码中忘记转换了,结果导致一执行到就退出;
五、PyQt提供的方法对类型检查本身不严格,但被PyQt包装的核心Qt本身是C++语言支持的,对类型检查严格,因此在调用时注意参数类型是否与定义一致;
六、PyQt的类或常量不知道来自哪个模块,遇到这种情况一种方法是import时逐一尝试,毕竟模块就那么几个,另一种是查看文档,qt官方文档地址为:https://doc.qt.io/archives,选择自己的版本后进入,但不提供关键词搜索功能,不是很好找;还有个办法是查看模块的__dict__
,方法都比较笨。
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036
PyQt学习随笔:使用PyCharm+PyQt开发遇到的坑的更多相关文章
- PyQt学习随笔:Model/View开发时在view数据项中设置不同角色数据的方法
在往Model中通过QStandardItem等类插入数据项时,除了实际插入的存储数据,还可以设置不同角色(请参考<PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及 ...
- PyQt学习随笔:Model/View开发时从Model相关类派生自定义类需要注意的问题
在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的 ...
- PyQt学习随笔:使用QPropertyAnimation开发简单动画
QPropertyAnimation是PyQt5.QtCore模块提供的动画设计类,使用该类可以针对PyQt的界面对象进行动画播放,如果要针对一个指定对象进行动画播放,包括如下步骤: 一.创建动画对象 ...
- PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges ...
- PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model
老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...
- PyQt学习随笔:Model/View中TableView视图数据项编辑结果及视图数据项的访问
按照<PyQt学习随笔:Model/View中设置视图数据项可编辑的方法>的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中, ...
- PyQt学习随笔:Model/View架构中多个视图之间选择数据项同步
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同 ...
- PyQt学习随笔:Model和View之间的数据互动过程
在<PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系>中介绍了,Model用于存储数据,View用于展 ...
- PyQt学习随笔:Qt Designer调用帮助时报错找不到assistant.exe文件的解决办法
老猿是按照<第15.5节 PyQt5安装与配置>步骤安装的PyQt及相关工具,但最近在Qt Designer中点击帮助相关菜单时报错找不到assistant.exe文件,如图: 按照报错信 ...
随机推荐
- HTML页面通过JS跨域调用,子传父
父页面:a.html 代码: <html> <head> <script type="text/javascript"> function te ...
- LVM划分磁盘及扩容缩容
lvm:logical volume monitor 逻辑卷管理器 作用: 采用lvm划分磁盘:磁盘空间不够时,方便扩展磁盘.物理卷加到卷组时被划分等大的pe,即pv是由众多pe构成.pe是卷组的最小 ...
- rbd-mirror新功能
RBD 的 mirroring 功能将会在下一个稳定版本Jewel中实现,这个Jewel版本已经发布了第一个版本10.1.0,这个功能已经在这个发布的版本中实现了 一.基本原理 我们试图解决的或者至少 ...
- 《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
<Machine Learning in Action>-- Taoye给你讲讲决策树到底是支什么"鬼" 前面我们已经详细讲解了线性SVM以及SMO的初步优化过程,具体 ...
- 【鸿蒙应用开发】使用确切位置布局(PositionLayout)实现登录页面
上一节我们了解了PositionLayout(确切位置布局,我更倾向于称为绝对布局),虽然应用场景稀少.维护不方便,但是该有的示例还是不能少. UI图拆解及代码实现 这个界面我们是不是很熟悉,打开浏览 ...
- C/C++编程日记:逻辑井字棋(圈叉)(用空格初始化)
问题描述: 3*3的棋盘中,只要一条线上出现三个一样的棋子就获胜(玩家或电脑):如果棋盘已经放满还未出现三个棋子一条线则打成平手. 具体细节: 初始化棋盘(用空格初始化) //初始化棋盘 vo ...
- Linux内核剖析——操作系统的启动
一.总体功能 1.从通电到BIOS跳转 1.1 CPU在通电后,先进入实模式,设置CS=0XFFFF,IP = 0X0000(指向BIOS) 1.2 BIOS进行执行系统监测,并且在地址=0处初始化中 ...
- 基于Pycharm的Python开发环境配置
基于Pycharm的Python开发环境配置 编辑于2020-11-18 Python安装 双击桌面的Python3.x安装包. 勾选Add to path. 方便起见,选择Install now.下 ...
- 思维导图软件iMindMap制作技巧有哪些
iMindMap11是iMindMap全新的版本.它可以提供给我们更好的灵活性以便我们将我们的思维进行可视化,并进一步的呈现和开发出属于自己的想法以及思维方式.在iMindMap中我们可以利用思维导图 ...
- Guitar Pro小课堂之弹唱和弦转换小技巧
吉他相对其他乐器的便携性,还有其便于弹唱的特点,受到了很多音乐萌新们的喜爱.对于刚刚接触吉他的萌新来说,学琴初期弹唱的时候经常会因为和弦卡顿的转换,和因为食指力度不够或技巧不对无法顺利演奏的大横按,导 ...