2014-05-20 61 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