首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按字母顺序排序QComboBox项,而不考虑索引

按字母顺序排序QComboBox项,而不考虑索引
EN

Stack Overflow用户
提问于 2014-05-20 07:48:16
回答 1查看 3.4K关注 0票数 1

我有一份按特定顺序排列的植物清单,它们应该是严格的,并由索引来表示。然而,在QComboBox中,植物应该按字母顺序显示。

为了做到这一点,我尝试了如下:

代码语言:javascript
运行
复制
    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、are最近被添加)。脚本需要知道选择了哪一种植物--我想用索引和关联数组来实现这一点。为了方便植物的选择(其中有六个以上),应该在下拉列表中按字母顺序列出它们。

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

代码语言:javascript
运行
复制
    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")

我希望这澄清了我问题的含义:在不改变所有其他指标的情况下,应该可以很容易地将一个新的植物放在字母大小正确的位置。

在下一步中,应该根据植物选择来执行正确的任务:

代码语言:javascript
运行
复制
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
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-20 11:52:47

QCombobox总是按索引排序。如果你真的需要让它们按字母顺序排列,并存储一些数字数据,那么为每一项设置数据。

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23753868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档