2017-02-28 98 views
0

我想正確設置Tkinter列表框值,它不工作。列表框默認值

self.carrier = Listbox(self) 
self.carrier.grid(row=0, column=0) 
self.carrier.insert(0, "Verizon") 
self.carrier.insert(1, "AT&T") 
self.carrier.insert(2, "T-Mobile") 
self.carrier.insert(3, "Sprint") 

self.carrier.selection_set(self.carrier_num_map(data['carrier'])) 

def carrier_num_map(self, carrier): 
    carrier_handles = { 
     "AT&T": 1, 
     "T-Mobile": 2, 
     "Verizon": 0, 
     "Sprint": 3 
    } 
    handle = carrier_handles.get(carrier, None) 
    return handle 

現在傳入的值(在data ['carrier']中)是正確的 - 我已經驗證過。

但由於某種原因,它默認爲列表中的第一個值(索引0 - Verizon),除非我明確地單擊一個值。

這是爲什麼?這個代碼不應該選擇我想要激活的值嗎?它看起來是在小部件中選擇的,但是當我嘗試基於它運行代碼時,它使用列表中的第一個代碼。

編輯:添加列表框。使用此當前設置,程序啓動時會突出顯示正確的值。

下面就一起來看看JSON文件,我從拉數據變量:

{"username": "[email protected]", "password": "mypass", "phone_num": "555-555-1212", "carrier": "Sprint"} 

採用這種設置,Sprint將在程序啓動列表框突出,但是,如果我馬上按下一個按鈕這應該得到載體價值:

carrier = self.carrier.get(ACTIVE) 

它得到VERIZON,而不是,例如,Sprint。

+0

我很困惑。該代碼沒有列表,也沒有任何Tkinter代碼。你確定你粘貼了正確的文字嗎?請提供[mcve]。 – Kevin

+0

selection_set()是Tkinter中的一個方法,self.carrier是一個Tkinter Listbox對象(雖然不是很清楚)。我會盡快補充其餘部分,以便我的問題更清楚。 –

回答

0

不知道爲什麼,但添加該代碼使得它正常工作:

self.carrier.selection_anchor(self.carrier_num_map(data['carrier'])) 

這是設置實際值正確顯然供以後調用需要的。

self.carrier.selection_set(self.carrier_num_map(data['carrier'])) 

這就是重點。

,後來當我需要的值

carrier = self.carrier.get(ANCHOR)