11

在我的函数中,我有空值的字典:

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

我应该如何将“Maya Executable”(即第 0 个键)设置为 QComboBox 加载时要选择的默认项?

我试过:

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

但这并没有设置默认值:-(

4

2 回答 2

9

Python 字典没有排序。self.items.keys()[0] 每次可能返回不同的结果。要解决您的问题,您应该首先添加项目,然后将“Maya Executable”的索引从 self.items.keys() 传递给 self.appExeCB.setCurrentIndex:

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

请注意,这不会按照您在 self.items 中声明的顺序将项目放入 QComboBox 中,因为如前所述,Python 字典没有排序。

于 2012-12-08T18:55:35.607 回答
3

您的代码有几处问题。

首先,字典没有固定的顺序,所以键不一定会按照它们插入的顺序结束:

>>> 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())

(注意:OrderedDict 需要 Python >= 2.7)

于 2012-12-08T18:54:29.383 回答