列表框默认值

时间:2017-02-28 13:56:23

标签: python tkinter listbox

我正在尝试正确设置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

现在传入的值(在数据['载体']中)是正确的 - 我已经验证了。

但是出于某种原因,它默认为列表中的第一个值(索引0 - Verizon),除非我明确地单击一个值。

为什么会这样?这段代码不应该选择我想要激活的值吗?它看起来在窗口小部件中被选中,但是当我尝试基于它运行代码时,它使用列表中的第一个。

编辑:添加了列表框。使用此当前设置,程序启动时会突出显示正确的值。

以下是我从中提取数据变量的JSON文件:

{"username": "myemail@gmail.com", "password": "mypass", "phone_num": "555-555-1212", "carrier": "Sprint"}

使用此设置,如果我立即按下应该获得载波值的按钮,Sprint将在程序启动时在列表框中突出显示:

carrier = self.carrier.get(ACTIVE)

它获得了VERIZON,而不是Sprint。

2 个答案:

答案 0 :(得分:1)

.selection_set 和 .see 的组合为我做到了。如果列表框有很多项目,使用 .see 很重要,这样选定的值就会显示在屏幕上。下面的代码示例:

import tkinter as tk
root = tk.Tk()

listbox = tk.Listbox(root)
listbox.pack()

listbox.insert(0, 'Hello 1')
listbox.insert(1, 'Hello 2')
listbox.insert(2, 'Hello 3')
listbox.insert(3, 'Hello 4')
listbox.insert(4, 'Hello 11')
listbox.insert(5, 'Hello 12')
listbox.insert(6, 'Hello 13')
listbox.insert(7, 'Hello 14')
listbox.insert(8, 'Hello 21')
listbox.insert(9, 'Hello 22')
listbox.insert(10, 'Hello 23')
listbox.insert(11, 'Hello 24')
listbox.insert(12, 'Hello 31')
listbox.insert(13, 'Hello 32')
listbox.insert(14, 'Hello 33')
listbox.insert(15, 'Hello 34')
listbox.selection_set(12)
listbox.see(12)
root.mainloop()

答案 1 :(得分: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)