Как установить элемент по умолчанию QComboBox

в мои функции, у меня есть словарь с пустыми значениями:

self.items = {
'Maya Executable': '',
'Render': '',
'Mayapy Interpreter': '',
'imgcvt': '',
'IMConvert': '',
}

Как установить "исполняемый файл Maya" (т. е. 0-й ключ) в качестве элемента по умолчанию QComboBox, который будет выбран при загрузке?

пробовал:

self.appExeCB=QtGui.QComboBox()
self.appExeCB.setCurrentIndex(0)
self.appExeCB.addItems(self.items.keys())

но это не устанавливает значение по умолчанию : - (

2 ответов


словари Python не упорядочены. личность.предметы.keys () [0] может возвращать разные результаты каждый раз. Чтобы решить вашу проблему, вы должны сначала добавить элементы, а затем передать индекс "Maya Executable" от себя.предметы.ключи () к себе.appExeCB.setCurrentIndex:

self.appExeCB=QtGui.QComboBox()
self.appExeCB.addItems(self.items.keys())
self.appExeCB.setCurrentIndex(self.items.keys().index('Maya Executable'))

обратите внимание, что это не будет помещать элементы в QComboBox в порядке, который вы объявили в self.элементы, потому что, как было сказано ранее, словари Python не упорядочены.


есть несколько вещей неправильно с вашим кодом.

во-первых, словари не имеют фиксированного порядка, поэтому ключи не обязательно в том же порядке, в котором они были вставлены в:

>>> items = {
...     'Maya Executable': '',
...     'Render': '',
...     'Mayapy Interpreter': '',
...     'imgcvt': '',
...     'IMConvert': '',
...     }
>>> items.keys()
['Mayapy Interpreter', 'IMConvert', 'imgcvt', 'Render', 'Maya Executable']

таким образом," Maya Executable " не является первым элементом в списке ключей.

во-вторых, вы пытаетесь установить текущий индекс до добавление элементов, когда вы должны после этого. Как бы то ни было, поле со списком будет отображаться по умолчанию первый пункт, который будет "Mayapy Interpreter".

редактировать:

Если вы используете OrderedDict ваш пример кода должен работать, как ожидалось:

from collections import OrderedDict
...
self.items = OrderedDict([
    ('Maya Executable', ''),
    ('Render', ''),
    ('Mayapy Interpreter', ''),
    ('imgcvt', ''),
    ('IMConvert', ''),
    ])
self.appExeCB.addItems(self.items.keys())

(NB: Python >= 2.7 требуется для OrderedDict)