【问题标题】:How to set the default item of a QComboBox如何设置 QComboBox 的默认项
【发布时间】:2012-11-26 14:45:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: python pyqt4 indexing qcombobox


    【解决方案1】:

    Python 字典没有排序。 self.items.keys()[0] 每次可能返回不同的结果。要解决您的问题,您应该先添加项目,然后将“Maya 可执行文件”的索引从 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 字典没有排序。

    【讨论】:

    • 当心!不能保证 python dict 中的键顺序是稳定的。您需要保留第一次调用 self.items.keys() 的结果并使用此特定列表。再次调用 self.items.keys() 可能会产生排序不同的相同键。
    【解决方案2】:

    您的代码有几处问题。

    首先,字典没有固定的顺序,所以键的顺序不一定与插入时的顺序相同:

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

    【讨论】:

    • 是的,但是 Maya Interpreter 怎么会是第一项(即第 0 项)
    • @san。字典是一个没有固定顺序的映射。如果你想要一个固定的订单,你可以使用OrderedDict
    • 猜我不能使用它,因为我绑定到 python 2.6
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 2011-11-29
    • 2012-02-18
    • 2020-07-09
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多