Pyqt5 ComboBox сортирует данные автоматически

#python #pyqt5

#python #pyqt5

Вопрос:

Когда я вставляю словарь, подобный {"B": 1, "A": 2, "D": 3, "C": 4} в выпадающий список PyQt5, dict будет отсортирован в алфавитном порядке по ключам. Как я могу предотвратить это и сохранить исходный порядок?

Пример:

     dictionary = {"B": 1, "A": 2, "D": 3, "C": 4}
    self.comboBox.addItem("Test", dictionary)
    print(dictionary)
    print(self.comboBox.itemData(0))
  

Это выводит:

     {'B': 1, 'A': 2, 'D': 3, 'C': 4}
    {'A': 2, 'B': 1, 'C': 4, 'D': 3}
  

Комментарии:

1. использовать OrderedDict dict?

2. Какую версию Python вы используете?

3. Я использую Python 3.7

Ответ №1:

Похоже, что это ошибка (или, по крайней мере, неожиданное поведение), вызванная тем, как PyQt5 (и PySide2) хранит словари, обходным путем является использование OrderedDict:

 import collections

dictionary = {"B": 1, "A": 2, "D": 3, "C": 4}
print(dictionary)

self.comboBox = QtWidgets.QComboBox()
self.comboBox.addItem("Test", collections.OrderedDict(dictionary))

d = dict(self.comboBox.itemData(0))

print(d)
  

Вывод:

 {'B': 1, 'A': 2, 'D': 3, 'C': 4}
{'B': 1, 'A': 2, 'D': 3, 'C': 4}