11

私の関数には、空の値を持つ辞書があります:

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

「Maya Executable」(つまり 0 番目のキー) を QComboBox のデフォルト項目としてロード時に選択するにはどうすればよいですか?

私は試した:

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

しかし、これはデフォルト値を設定しません:-(

4

2 に答える 2

9

Python 辞書は順序付けされていません。self.items.keys()[0] は毎回異なる結果を返す場合があります。問題を解決するには、最初にアイテムを追加してから、「Maya Executable」のインデックスを self.items.keys() から self.appExeCB.setCurrentIndex に渡す必要があります。

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

前に述べたように、Python 辞書は順序付けられていないため、self.items で宣言した順序で QComboBox に項目が配置されないことに注意してください。

于 2012-12-08T18:55:35.607 に答える
3

コードにはいくつか問題があります。

まず、辞書には決まった順序がないため、キーが挿入された順序と同じになるとは限りません。

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

したがって、「Maya Executable」はキー リストの最初の項目ではありません。

次に、アイテムを追加する前に現在のインデックスを設定しようとしていますが、後で設定する必要があります。そのままでは、コンボボックスはデフォルトで最初の項目 (「Mayapy Interpreter」) を表示します。

編集

OrderedDictを使用する場合、サンプル コードは期待どおりに動作するはずです。

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

(注: OrderedDict には Python >= 2.7 が必要です)

于 2012-12-08T18:54:29.383 に答える