2014-05-20 39 views
1

我有一个按特定顺序排列的植物列表,应该由索引来保存和表示。但在QComboBox中,植物应按字母顺序显示。按字母顺序排列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") 

得到的组合框但是被责令像DAFBCE

看起来像我的做法是不工作...

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

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

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

我希望这clearifies我的问题的含义是:它应该可以很容易地将新的在不改变所有其他指标的情况下,按字母顺序排列右侧位置。

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

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

“我有一个按照特定顺序排列的植物列表,应该用索引来表示,而在QComboBox中,植物应该按照字母顺序显示。”因此,无论是两个订单重合还是您的要求都毫无意义。您无法同时显示符合两个不同订单的商品。如果这不是你的意思,那么你必须付出一些努力来解释你的意思。 – Bakuriu

回答

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

就是这样。有没有办法在QListWidget上做同样的事情? –

+0

是使用QListWidgetItem数据http://pyside.github.io/docs/pyside/PySide/QtGui/QListWidgetItem.html – HashSplat