无论索引如何,都按字母顺序排序QComboBox项目

时间:2014-05-20 07:48:16

标签: python pyqt5

我有按特定顺序排列的植物清单,应该由指数保存并表达。然而,在QComboBox中,植物应按字母顺序显示。

为此,我尝试了这个:

    self.plant = QComboBox(self)
    self.plant.insertItem(4, "A")
    self.plant.insertItem(1, "B")
    self.plant.insertItem(3, "C")
    self.plant.insertItem(0, "D")
    self.plant.insertItem(5, "E")
    self.plant.insertItem(2, "F")

然而,生成的ComboBox的排序方式与D A F B C E

相同

看起来我的方法不起作用......

编辑(问题的进一步解释): 植物按历史顺序列在数据库中(植物D是最老的,然后是B,F,C,A-E最近已添加)。脚本需要知道选择了哪个工厂 - 我想用索引和关联数组来做这个。 为了简化工厂选择(其中有六个以上),应在下拉列表中按字母顺序列出。

如果我想添加一个名为Ca的新工厂,我会像这样编辑脚本:

    self.plant = QComboBox(self)
    self.plant.insertItem(4, "A")
    self.plant.insertItem(1, "B")
    self.plant.insertItem(3, "C")
    self.plant.insertItem(6, "Ca")
    self.plant.insertItem(0, "D")
    self.plant.insertItem(5, "E")
    self.plant.insertItem(2, "F")

我希望这能清楚我的问题的含义:应该可以在不改变所有其他索引的情况下轻松地将新工厂放置在字母右侧的位置。

在下一步中,应根据工厂选择执行正确的任务:

options = {0 : D,
           1 : B,
           2 : F,
           3 : C,
           4 : A,
           5 : E,
           6 : Ca,
}

def D():
    #do task for plant D

def B():
    #do task for plant D
...

1 个答案:

答案 0 :(得分:1)

QCombobox始终按索引排序。如果您确实需要按字母顺序排列并存储一些数字数据,请设置每个项目的数据。

cb = QComboBox()
cb.addItem("A", 4)
cb.addItem("B")
cb.setItemData(1, 1, Qt.UserRole)

# To get the data. or cb.itemData(cb.currentIndex(), Qt.UserRole)
cb.itemData(0, Qt.UserRole)