更新

时间:2017-02-25 16:24:37

标签: python tkinter

我正在使用Tkinter列表框小部件来跟踪活动用户列表。当用户登录和注销时,此小组件会不断更新。每次我更新列表框时,我都会清除整个内容并重新填充它们。每次我这样做,当前的选择都会丢失。我想添加一些逻辑来重新选择在更新列表框之前选择的项目(如果选择了一个项目)。我能够使用get(Tkinter.ACTIVE)获取当前选择的值,并且我能够在使用索引(Tkinter.END)插入列表时获取索引。但是,我尝试使用selection_set()和activate(),但都不起作用。我之前尝试过selection_clear(),调用focus()和event_generate(“<>”)并且没有任何效果。这是我的代码:

def update_userlist(self):
    curselection = self.listbox.get(Tkinter.ACTIVE)
    print_msg("curselection == " + curselection)

    self.listbox.delete(0, Tkinter.END)
    for user in self.users:
        self.listbox.insert(Tkinter.END, user)
        if user == curselection:
            selectionindex = self.listbox.index(Tkinter.END)
            print_msg("selectionindex == " + str(selectionindex))
        else:
            selectionindex = None

    self.listbox.update()
    if selectionindex:
        self.listbox.selection_clear(0, Tkinter.END)
        self.listbox.selection_set(selectionindex)
        self.listbox.activate(selectionindex)
        self.listbox.focus()
        self.listbox.event_generate("<<ListboxSelect>>")
    self.chatframe.update()

我正在使用Python 2.7。重新填充列表框后,如何重新选择以前选择的值?

1 个答案:

答案 0 :(得分:0)

在此处找到可行的解决方案:Keeping Selected Listbox Item through re-write此答案可能会标记为重复