• 作者:老汪软件技巧
  • 发表时间:2024-08-25 00:07
  • 浏览量:

前言

在PyQt5的界面中对于数据的输入有很多控件可以使用。在这次开发中,我最常用的就是QLineEdit控件,该控件作为基本的数据输入控件已经能满足我们的简单使用。

需要注意的是,这个控件只能编辑单行文本,就像QLabel只能单行输出。

在使用过程,我们仅需要输入简单的数据,但是出现闪退的情况,发现报错:

ValueError: invalid literal for int() with base 10: ''

整体程序闪退。发现就是QLineEdit控件不能在转化int的过程中出现空的情况。

分析原因

在使用过程中,我们在获取得到QLineEdit控件的输入后,需要将其转化为对应的字节,然后组包进行传递。在这个过程中,有些QLineEdit控件没有输入数据,而是以空的形式进行数据传递。实则我们获得空的传递需要转化为0的形式进行下一步的输出。那么就会出现QLineEdit的''传递,在转化为int的情况下,程序报错闪退。

_报错应输入声明_出错警告输入错误提示

self.n.text()这就是定义ui中的QLineEdit控件为n,获取用户在n输入的文本。当输入的文本为空时,该语句在转化成int的情况下,会出现报错!

解决办法

最开始查是否可以直接属性设置,但是考虑到单纯的属性设置是不能满足我们实际需要,属性也无法实现。再查询了一些资料,也查出可以设置正则表达式或者限制输入来解决问题。我采用了一种最简单也是最笨的形式,就是三目运算,在获取得到的数值进行判断,暂时解决当下的问题。

par=(int(self.n.text() if self.n.text()!='' else 0).to_bytes(1, byteorder='little', signed=True))

采用三目运算直接判断是否为'',如果为'',则输入为0,不为'',则直接采用其控件输入。这里涉及到python的三目运算:

true if xxx else false

简单说明一下python的三目运算,当xxx满足条件的情况下,设置为true,否则设置为false。

总结

任何程序的报错,通过错误提示或者debug调试,找出问题源头,从源头进行解决!当然这个解决办法仅仅解决空问题,但是对输入没有具体的限制,后续对可以接着这个问题进行深究!