我有一份按特定顺序排列的植物清单,它们应该是严格的,并由索引来表示。然而,在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、are最近被添加)。脚本需要知道选择了哪一种植物--我想用索引和关联数组来实现这一点。为了方便植物的选择(其中有六个以上),应该在下拉列表中按字母顺序列出它们。
如果我想添加一个名为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
...
发布于 2014-05-20 11:52:47
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)
https://stackoverflow.com/questions/23753868
复制相似问题