gpt4 book ai didi

python - 从 CSV 加载数据时,QAbstractListModel 不会更新值,但在使用硬编码值时会更新

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:29 25 4
gpt4 key购买 nike

我在一个脚本中制作了一个缩小的应用程序来专门解决这个问题。代码粘贴为here .

当我按“自动 ROI”时,应用程序只需获取硬编码坐标并将它们绘制到 pyqtgraph View 中:

enter image description here

当我尝试从文本文件“加载解剖坐标”时(见下文),一切似乎都按预期工作,除了 ROI 的名称没有显示在右下角的 ROI 列表中。该小部件是一个 RoiItemModel (这是一个 QAbstractListModel)

enter image description here

这是我使用的文本文件:

1) ROI Name, 2) Length, 3) X Coordinate, 4) Y Coordinate
AC, 3, 0.5, 0.0
V1, 3, 2.5, -2.5
M2, 3, 1.5, 1.75
BC, 3, 3.5, -1.0
RS, 3, 0.5, -2.5
M1, 3, 1.0, 2.5
HL, 3, 2.0, 0.0
HL2, 4, -2.0, 0.0
HL3, 6, -3.5, 1.0

在调试时,我发现使用相同的参数调用以下代码行似乎会给出两个不同的结果:

self.dataChanged.emit(self.index(row), self.index(row)) # in RoiItemModel

唯一不同的是(据我所知),在一种情况下,我对数据进行了硬编码(有效),而在另一种情况下,我使用 csv.reader 首先将值转换为相同的格式(不起作用)

奖金信息:

我将所有 rois 的路径保存到 JSON 文件中,并使用 QSettings 在运行时加载该文件,以便立即用 ROI 名称填充列表。在我的主程序(不是 Pastebein 示例)中,如果我退出程序并重新运行它,则将从文件中加载 roi 名称并正确填充到 RoiItemModel 中,以便显示名称。

我尝试将 csv 加载的 ROI 位置存储在 self.data 中 - 正是存储硬编码坐标的位置 - 然后只有在按下按钮后,self.data 中的坐标才用于绘制 ROI 的但仍然失败

基本上是这样的:

  • 硬编码self.data -> 按下按钮调用使用self.data 的函数 -> 有效
  • 从 csv 加载并存储在 self.data 中 -> 按按钮调用使用 self.data 的函数 -> 不起作用。

奇怪。

最佳答案

有问题的代码在这里:

def load_ROI_table(self):
...
roi_names = [roi_table[x, 0] for x in roi_table_range]
print(roi_names)

这给出了非常具有误导性的输出:

['AC', 'V1', 'M2', 'BC', 'RS', 'M1', 'HL', 'HL2', 'HL3']

这在 numpy 中是一个非常糟糕的设计选择,因为该列表中的对象不是 python 字符串:

print(['%s %r' % (type(i), i) for i in roi_names])
...
["<class 'numpy.str_'> 'AC'", "<class 'numpy.str_'> 'V1'", "<class 'numpy.str_'> 'M2'", "<class 'numpy.str_'> 'BC'", "<class 'numpy.str_'> 'RS'", "<class 'numpy.str_'> 'M1'", "<class 'numpy.str_'> 'HL'", "<class 'numpy.str_'> 'HL2'", "<class 'numpy.str_'> 'HL3'"]

Qt 对此类 numpy 类型一无所知,因此您必须小心地将它们转换为普通的 python 类型:

roi_names = [str(roi_table[x, 0]) for x in roi_table_range]

关于python - 从 CSV 加载数据时,QAbstractListModel 不会更新值,但在使用硬编码值时会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com