2012-12-08 6 views
6

In meiner Funktion I Wörterbuch mit leeren Werten haben setzen:Wie wird das Standardelement eines QComboBox

self.items = { 
'Maya Executable': '', 
'Render': '', 
'Mayapy Interpreter': '', 
'imgcvt': '', 
'IMConvert': '', 
} 

Wie soll ich sein gesetzt „Maya Executable“ default Element (dh die 0-te Schlüssel), wie die QComboBox ausgewählt, wenn es lädt?

Ich versuchte.

self.appExeCB=QtGui.QComboBox() 
self.appExeCB.setCurrentIndex(0) 
self.appExeCB.addItems(self.items.keys()) 

Aber diesen Satz nicht den Wert Standard :-(

Antwort

3

Python Wörterbücher sind nicht geordnet. self.items.keys() [0] kann jedes Mal unterschiedliche Ergebnisse liefern. Zur Lösung Ihres Problems sollten Sie die Artikel zuerst hinzufügen und dann den Index ‚Maya Executable‘ Flanke von self.items.keys() zu self.appExeCB.setCurrentIndex:

self.appExeCB=QtGui.QComboBox() 
self.appExeCB.addItems(self.items.keys()) 
self.appExeCB.setCurrentIndex(self.items.keys().index('Maya Executable')) 

Beachten Sie, dass dies nicht der gesetzt wird Einträge in der QComboBox in der Reihenfolge, wie Sie sie in self.items deklariert haben, weil Python-Wörterbücher wie gesagt nicht geordnet sind.

+0

Vorsicht! Die Reihenfolge der Schlüssel aus einem Python-Diktat ist nicht garantiert stabil. Sie müssen das Ergebnis des ersten Aufrufs von self.items.keys() behalten und diese spezifische Liste verwenden. Bei erneutem Aufruf von self.items.keys() können die gleichen Schlüssel anders sortiert werden. – LBarret

3

Es gibt ein paar Dinge falsch mit Ihrem Code sind

Erstens haben Wörterbücher keine festgelegten Reihenfolge, so dass die Tasten werden nicht unbedingt in der gleichen Reihenfolge am Ende, dass sie sich in eingefügt:

>>> items = { 
...  'Maya Executable': '', 
...  'Render': '', 
...  'Mayapy Interpreter': '', 
...  'imgcvt': '', 
...  'IMConvert': '', 
...  } 
>>> items.keys() 
['Mayapy Interpreter', 'IMConvert', 'imgcvt', 'Render', 'Maya Executable'] 

So "Maya Executable" ist nicht das erste Element in der Liste der Schlüssel.

Zweitens versuchen Sie, den aktuellen Index vor die Elemente hinzuzufügen, wenn Sie es später festlegen sollten. So wie es ist, wird die Combo-Box standardmäßig das erste Element anzeigen, was "Mayapy Interpreter" wäre.

EDIT:

from collections import OrderedDict 
... 
self.items = OrderedDict([ 
    ('Maya Executable', ''), 
    ('Render', ''), 
    ('Mayapy Interpreter', ''), 
    ('imgcvt', ''), 
    ('IMConvert', ''), 
    ]) 
self.appExeCB.addItems(self.items.keys()) 

(NB: Python> = 2.7 für OrderedDict erforderlich)

Wenn Sie eine OrderedDict, Ihr Beispielcode verwenden sollten wie erwartet

+1

Ja, aber wie stellt sich Maya Interpreter als erster Artikel heraus (d. H. Der 0te Artikel) –

+0

@san. Ein Wörterbuch ist ein * Mapping * ohne feste Reihenfolge. Wenn Sie eine feste Reihenfolge wünschen, können Sie ein [OrderedDict] (http://docs.python.org/2/library/collections.html#collections.OrderedDict) verwenden. – ekhumoro

+1

rate ich kann es nicht verwenden, weil ich an Python gebunden bin 2.6 –

Verwandte Themen