2012-12-08 27 views
6

Trong chức năng của tôi, tôi có từ điển với các giá trị rỗng:Làm thế nào để thiết lập các mục mặc định của một QComboBox

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

Làm thế nào tôi nên đặt "Maya thực thi" (tức là phím 0) như mục mặc định của QComboBox được được chọn khi tải?

tôi đã cố gắng:.

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

Nhưng điều này không thiết lập giá trị mặc định :-(

Trả lời

3

Python Từ điển không được đặt hàng. self.items.keys() [0] có thể trả về các kết quả khác nhau mỗi lần. Để giải quyết vấn đề của bạn, bạn nên thêm mục đầu tiên và sau đó vượt qua các chỉ số của 'Maya thực thi' từ 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')) 

Lưu ý rằng điều này sẽ không đặt các mục trong QComboBox theo thứ tự bạn khai báo trong self.items vì như đã nói trước khi từ điển Python không được đặt hàng.

+0

Hãy coi chừng! Thứ tự của các phím từ một dict python không được đảm bảo để được ổn định. bạn cần giữ kết quả của cuộc gọi đầu tiên tới self.items.keys() và sử dụng danh sách cụ thể này. Gọi lại self.items.keys() có thể tạo ra các khóa giống nhau được sắp xếp khác nhau. – LBarret

3

Có một vài điều sai với mã của bạn

Thứ nhất, từ điển không có trật tự cố định, vì vậy các phím sẽ không nhất thiết phải kết thúc trong thứ tự mà chúng đã được lắp vào:

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

Vì vậy, "Maya thực thi" không phải là mục đầu tiên trong danh sách các phím.

Thứ hai, bạn đang cố gắng đặt chỉ mục hiện tại trước khi thêm các mục, khi bạn nên đặt nó sau đó. Vì nó là, combo-box sẽ chỉ mặc định để hiển thị mục đầu tiên, đó sẽ là "Mayapy Interpreter".

EDIT:

Nếu bạn sử dụng một OrderedDict, mã ví dụ của bạn nên làm việc như mong đợi:

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

(NB: Python> = 2,7 là cần thiết cho OrderedDict)

+1

có nhưng cách thông dịch viên Maya hóa ra là mục đầu tiên (tức là mục thứ 0) –

+0

@san. Từ điển là * ánh xạ * không có thứ tự cố định. Nếu bạn muốn một lệnh cố định, bạn có thể sử dụng [OrderedDict] (http://docs.python.org/2/library/collections.html#collections.OrderedDict). – ekhumoro

+1

đoán tôi không thể sử dụng nó vì tôi bị ràng buộc với python 2.6 –

Các vấn đề liên quan