2011-12-07 57 views
14

我需要一些幫助,將一些項目添加到combBox。因此,我有兩個組合框,其中一個combobox根據所選項目填充另一個組合框。在pyqt中,如何在組合框中添加項目?

我的問題是,使用additem爲新項目,它的工作原理,但如果我爲combobox選擇另一個選項,它會添加新的項目,但以前的項目不見了,並且新項目下面有空白項目。

我想每次我從第一個combobox選擇一個新的選項,要清除第二個combobox的內容,我在第二個使用clear(),但它沒有奏效。

這就是我想到這一點:

self.comboBox_2.clear() 
for index,i in enumerate(list1): 
    self.comboBox_2.addItem(_fromUtf8("")) 
    self.comboBox_2.setItemText(index+2, QtGui.QApplication.translate("Dialog", i, None, QtGui.QApplication.UnicodeUTF8)) 

以上是執行第一combobox變化時功能的一部分。

回答

25

假設list1是一個字符串列表,那麼你可以簡單地添加一次全部使用addItems方法:即你可能在你的榜樣錯誤的方式使用QApplication.translate

self.comboBox_2.clear() 
self.comboBox_2.addItems(list1) 

注意。如果要使list1中的字符串可以翻譯爲不同的語言,則應該在創建列表時使用該字符串,並使用字符串文字

例如:

list1 = [ 
    self.tr('First Item'), 
    self.tr('Second Item'), 
    self.tr('Third Item'), 
    ] 

還要注意的是_fromUtf8功能,如果你使用包含在你的代碼的非ASCII字符的字符串文字是唯一真正有用的 - 否則,它基本上是一個無操作。

編輯

如果列表中包含,比方說,像素圖和文字的元組,那麼你可以使用這樣的事情:

self.comboBox_2.clear() 
for pixmap, text in list1: 
    self.comboBox_2.addItem(QIcon(pixmap), text) 
+0

謝謝,它的工作。我for循環會工作,無論是否有另一種方式?我打算爲列表中的每個字符串添加一些圖標,這就是爲什麼我想到了循環。 – GiannisIordanou