2017-02-28 162 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)