如何滚动非活动的Tkinter ListBox?

1 投票
1 回答
1534 浏览
提问于 2025-04-16 03:14

我正在用Python写一个Tkinter的图形界面。界面上有一个输入框用来搜索,下面有一个结果列表框(ListBox)。这个列表框还有一个滚动条。请问我怎么才能让用户在不切换输入框焦点的情况下,用鼠标和方向键在列表框中滚动呢?也就是说,我希望用户可以输入搜索内容、滚动列表,同时继续输入,而不需要在不同的控件之间来回切换。谢谢!

1 个回答

6

给输入框添加一些绑定,这样当用户按上下箭头键或者使用上下滚轮时,就会调用列表框的 yview 和/或 see 命令。

比如,你可以这样处理箭头键的操作:

class App(Tkinter.Tk):
    def __init__(self):
        Tkinter.Tk.__init__(self)
        self.entry = Tkinter.Entry()
        self.listbox = Tkinter.Listbox()
        self.entry.pack(side="top", fill="x")
        self.listbox.pack(side="top", fill="both", expand=True)
        for i in range(100):
            self.listbox.insert("end", "item %s" % i)

        self.entry.bind("<Down>", self.OnEntryDown)
        self.entry.bind("<Up>", self.OnEntryUp)

    def OnEntryDown(self, event):
        self.listbox.yview_scroll(1,"units")

    def OnEntryUp(self, event):
        self.listbox.yview_scroll(-1,"units")

撰写回答