如何设置QComboBox的默认项

时间:2012-12-08 17:10:43

标签: python pyqt4 indexing qcombobox

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

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

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

2 个答案:

答案 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)