Метод QCombobox finData всегда возвращает -1 с массивом numpy - PullRequest
2 голосов
/ 02 августа 2020

У меня проблема с попыткой получить индекс некоторых данных в поле со списком, когда для добавления элементов используется массив numpy, тогда как если я использую список, результат будет ожидаемым.

from PySide2 import QtWidgets
import numpy as np


app = QtWidgets.QApplication()

heights_list = [0.52, 1, 2, 3, 4, 12.57, 14.97] 
heights_array = np.array([0.52, 1, 2, 3, 4, 12.57, 14.97])

combo_list = QtWidgets.QComboBox()
for height in heights_list:
    combo_list.addItem(f"{height:.2f} m", height)

combo_array = QtWidgets.QComboBox()
for height in heights_array:
    combo_array.addItem(f"{height:.2f} m", height)

print(combo_list.findData(14.97))  # Print 6
print(combo_array.findData(14.97)) # Print -1

1 Ответ

2 голосов
/ 02 августа 2020

Метод findData() использует метод модели match(), а метод сопоставления использует QVariant s для сравнения. Со своей стороны, PySide2 (также PyQt5) для обеспечения совместимости выполняет PyObject преобразование (которое является представлением объекта python в C / C ++) в базовые c типы, такие как int, float, et c. но он не знает, как преобразовать объект numpy, а затем сохраняет только указатель, а при сравнении QVariant, в котором хранятся указатели, он сравнивает адрес памяти, но будучи двумя разными объектами, он всегда будет верните, что это не один и тот же объект.

...