2011-12-07 26 views
14

Ho bisogno di aiuto per aggiungere alcuni elementi a combBox. Quindi, ho due caselle combinate, una combobox compila l'altra in base all'elemento selezionato.In pyqt, come posso aggiungere elementi in una casella combinata?

La mia domanda è che, usando additem per nuovi elementi, funziona, ma se scelgo un'altra opzione per il combobox, aggiunge i nuovi elementi ma gli elementi precedenti sono spariti e ci sono elementi vuoti sotto quelli nuovi.

Ho pensato ogni volta che ho scelto una nuova opzione dal primo combobox, per cancellare il contenuto del secondo combobox, ho usato il clear() sul secondo, ma non ha funzionato.

È così che ho pensato di esso:

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

Quanto sopra è parte di una funzione che viene eseguita quando i primi combobox modifiche.

risposta

25

Supponendo list1 è una lista di stringhe, allora si può semplicemente aggiungerli tutti in una volta con il metodo addItems:

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

Nota che probabilmente si sta utilizzando QApplication.translate in modo sbagliato nel tuo esempio. Se si desidera che le stringhe in list1 siano tradotte in una lingua diversa, è necessario farlo quando lo crea l'elenco e utilizzare i valori letterali .

Ad esempio:

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

Si noti inoltre che la funzione _fromUtf8 è realmente utile solo se si sta utilizzando stringhe letterali che contengono caratteri non ASCII nel codice - in caso contrario, è fondamentalmente un no-op.

EDIT

Se l'elenco contiene, per esempio, tuple di pixmaps e testo, allora si può usare qualcosa di simile:

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

Grazie, ha funzionato. Il mio ciclo funzionerebbe, indipendentemente se esiste un altro modo? Intendo mettere alcune icone per ogni stringa nell'elenco, ecco perché ho pensato al loop. – GiannisIordanou

Problemi correlati