最近三天,老猿都在使用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开发遇到的坑的更多相关文章

  1. PyQt学习随笔:Model/View开发时在view数据项中设置不同角色数据的方法

    在往Model中通过QStandardItem等类插入数据项时,除了实际插入的存储数据,还可以设置不同角色(请参考<PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及 ...

  2. PyQt学习随笔:Model/View开发时从Model相关类派生自定义类需要注意的问题

    在<PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项>介绍的方法,从Model相关类派生自定义类,通过重写setData方法以获取View中数据的 ...

  3. PyQt学习随笔:使用QPropertyAnimation开发简单动画

    QPropertyAnimation是PyQt5.QtCore模块提供的动画设计类,使用该类可以针对PyQt的界面对象进行动画播放,如果要针对一个指定对象进行动画播放,包括如下步骤: 一.创建动画对象 ...

  4. PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges ...

  5. PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model

    老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...

  6. PyQt学习随笔:Model/View中TableView视图数据项编辑结果及视图数据项的访问

    按照<PyQt学习随笔:Model/View中设置视图数据项可编辑的方法>的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中, ...

  7. PyQt学习随笔:Model/View架构中多个视图之间选择数据项同步

    我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同 ...

  8. PyQt学习随笔:Model和View之间的数据互动过程

    在<PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系>中介绍了,Model用于存储数据,View用于展 ...

  9. PyQt学习随笔:Qt Designer调用帮助时报错找不到assistant.exe文件的解决办法

    老猿是按照<第15.5节 PyQt5安装与配置>步骤安装的PyQt及相关工具,但最近在Qt Designer中点击帮助相关菜单时报错找不到assistant.exe文件,如图: 按照报错信 ...

随机推荐

  1. 依赖注入DI(IOC)容器快速入门

    1.什么是IOC IOC是一种设计模式,全程控制翻转或叫依赖注入.更详细介绍见http://martinfowler.com/articles/injection.html 2.为什么用IOC 我们通 ...

  2. 6.java设计模式之适配器模式

    基本需求: 将一个220V的电压输出成5V的电压,其中220V电压为被适配者,变压器为适配器,5v电压为适配目标 基本介绍: 适配器模式属于结构型模式,将某个类的接口转换成客户端期望的另一个接口表示, ...

  3. 安全也挺让人心烦的 ---login shell

    今天查问题时, ssh 登录后台发现 需要输入密码,输入密码后弹出一个二维码, 然后扫码获取秘钥.输入秘钥登陆!!! 真是恶心了一把,找手机都花了不少时间!!!! 那么怎样干掉输入密码这些操作呢??? ...

  4. 信号-linux

    https://www.linuxjournal.com/article/3985 每个信号在 signal.h 头文件中通过宏进行定义,实际是在 signal.h 中定义,对于编号以及信号名的映射关 ...

  5. 查找数组中第k大的数

    问题:  查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...

  6. Makefile 指定源文件目录 make

    top=$(CURDIR) SRC_DIR=$(top)/src BUILD_DIR=$(SRC_DIR) src=$(wildcard $(SRC_DIR)/*.c) obj=$(patsubst ...

  7. python + selenium 搭建环境步骤

    介绍在windows下,selenium python的安装以及配置.1.首先要下载必要的安装工具. 下载python,我安装的python3.0版本,根据你自己的需要安装 下载setuptools ...

  8. SQL Server数据库Union和Union All查询出数据的区别?

    好久没有更新博客了,可能是最近比较忙,总是忽略了一些事情,今天查了做了一些数据分析的数据,突然感觉对Union和Union all有些不太理解了,可能是自己老了吧,就翻了一些资料,进行回忆和学习,趁着 ...

  9. 利用Vmware workstation安装MS-DOS使用Turbo C 2.0

    首先上各种软件的链接 链接:https://pan.baidu.com/s/1HfTDexiJSpioUnzKddUIyA 提取码:khtu 这个链接是压缩后的 链接:https://pan.baid ...

  10. ASP.NET Core管道详解[2]: HttpContext本质论

    ASP.NET Core请求处理管道由一个服务器和一组有序排列的中间件构成,所有中间件针对请求的处理都在通过HttpContext对象表示的上下文中进行.由于应用程序总是利用服务器来完成对请求的接收和 ...