在我的函数中,我有一个空值的字典:
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())
但是这没有设置默认值: - (
答案 0 :(得分:4)
Python字典不是有序的。 self.items.keys()[0]每次都可能返回不同的结果。要解决您的问题,您应首先添加项目,然后将self.items.keys()中的'Maya Executable'索引传递给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字典不是有序的。
答案 1 :(得分: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)