按字母顺序排列QComboBox项目,无视索引

1 投票
1 回答
3681 浏览
提问于 2025-04-18 07:04

我有一份植物的列表,这些植物是按照特定的顺序排列的,我希望这个顺序能够保持,并通过索引来表示。不过在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")

但是,结果显示的下拉框顺序是 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 个回答

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)

撰写回答