LabelImg使用时报错:TypeError: setValue(self, val: int)

项目场景:

TypeError: setValue(self, val: int): argument 1 has unexpected type ‘float’
使用LabelImg时突然间报错了


问题描述

突然的报错让我很意外,怎么会突然报错呢,下面是报错原因

Traceback (most recent call last):
  File "D:\miniconda\envs\mm\lib\site-packages\labelImg\labelImg.py", line 1014, in zoom_request
    self.add_zoom(scale * units)
  File "D:\miniconda\envs\mm\lib\site-packages\labelImg\labelImg.py", line 974, in add_zoom
    self.set_zoom(self.zoom_widget.value() + increment)
  File "D:\miniconda\envs\mm\lib\site-packages\labelImg\labelImg.py", line 971, in set_zoom
    self.zoom_widget.setValue(value)
TypeError: setValue(self, val: int): argument 1 has unexpected type 'float'

原因分析:

这个错误是因为在调用 drawLine 函数时传入了一个浮动类型(float)的参数,而该函数期望的是整数类型(int)或其他合适的类型(如 QPoint 或 QLine)。


解决方案:

按照报错上面的路径打开到canvas.py文件,右击选择打开方式–>记事本,接着搜索drawLine,可以发现有两行都使用了这个函数,全部修改:

p.drawLine(int(self.prev_point.x()), 0, int(self.prev_point.x()), int(self.pixmap.height()))
p.drawLine(0, int(self.prev_point.y()), self.pixmap.width(), int(self.prev_point.y()))

这个文件还有一处要修改

p.drawRect(int(left_top.x()), int(left_top.y()), int(rect_width), int(rect_height))

完成之后再次运行,发现还会报错,接着继续修改。
按照报错路径,找到labelImg.py文件,同样的方式,右击选择打开方式–>记事本,不同的是搜索bar.setValue,更改,保存:

bar.setValue(int(bar.value() + bar.singleStep() * units))

至此,重新打开LabelImg,成功可以使用!

### LabelImg 中 `TypeError` 的解决方案 当遇到 LabelImg 报错 `TypeError: setValue(self, val: int)` 或其他类似的错误,通常是因为 Python 版本或依赖库版本不兼容所引起的。以下是几种可能的原因及对应的解决方法: #### 1. 调整 Python 和依赖包的版本 如果当前使用Python 版本过高,则可能导致某些函数调用出现问题。建议创建一个新的虚拟环境并设置较低版本的 Python 来运行 LabelImg。 ```bash conda create -n labelimg_env python=3.9 conda activate labelimg_env pip install pyqt5 lxml git clone https://github.com/tzutalin/labelImg.git cd labelImg make qt5py3 ``` 通过上述命令可以确保安装了一个适合 LabelImg 运行的开发环境[^3]。 #### 2. 修改源码适应新特性 对于特定类型的 `TypeError`, 如 `argument 1 has unexpected type 'float'` ,这可能是由于 PyQt 库内部实现的变化造成的。可以通过修改源文件中的相关部分来解决问题。例如,在 `spinBox.setValue()` 方法前加入转换操作: ```python value = int(value) # 将浮点数强制转成整形再赋给控件 self.spinBox.setValue(value) ``` 这种做法能够有效防止传入参数类型不符合预期的情况发生[^1]。 #### 3. 更新配置文件路径处理逻辑 有也会因为字符串索引方式不对而抛出异常 (`string indices must be integers`) 。此应该检查涉及读取 JSON 文件或其他结构化数据的地方是否有误,并修正相应的访问语法: ```python if "image" in image and isinstance(image["image"], str): if image["image"] == self.filename: ... ``` 这样能避免直接尝试用字典形式解析非映射对象而导致崩溃[^2]。 综上所述,针对不同原因引发的 `TypeError` 错误,采取相应措施调整程序执行上下文即可恢复正常功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值