Python tkinter仅修改具有焦点的列表框

时间:2014-10-14 16:19:54

标签: python listbox tkinter focus

美好的一天,

我有一个python应用程序,它生成多个列表框,每个列表框都有自己的数据列表。这些列表框是根据用户生成列表的长度动态创建的。

我有一个按钮,当点击时我想触发一些代码来影响活动列表框(从列表中删除值等)。

因此,我的计划是遍历所有列表框,只有在列表框具有焦点时才进行深入研究。但是,经过2-3个小时的问题和tkinter文件剥离后,我找不到任何方法来确定是否有重点。

提前致谢!

1 个答案:

答案 0 :(得分:3)

小部件能够发出<FocusIn><FocusOut>个事件,因此您可以绑定回调以手动跟踪哪个列表框具有焦点。例如:

from Tkinter import *

class App(Tk):
    def __init__(self, *args, **kargs):
        Tk.__init__(self, *args, **kargs)
        self.focused_box = None
        for i in range(4):
            box = Listbox(self)
            box.pack()
            box.insert(END, "box item #1")
            box.bind("<FocusIn>", self.box_focused)
            box.bind("<FocusOut>", self.box_unfocused)

        button = Button(text="add item to list", command=self.add_clicked)
        button.pack()

    #called when a listbox gains focus
    def box_focused(self, event):
        self.focused_box = event.widget

    #called when a listbox loses focus
    def box_unfocused(self, event):
        self.focused_box = None

    #called when the user clicks the "add item to list" button
    def add_clicked(self):
        if not self.focused_box: return
        self.focused_box.insert(END, "another item")

App().mainloop()

在这里,点击按钮将添加另一个项目&#34;无论哪个列表框都有焦点。