【问题标题】:How to scroll an inactive Tkinter ListBox?如何滚动非活动的 Tkinter 列表框?
【发布时间】:2010-08-24 18:20:40
【问题描述】:

我正在用 Python 编写一个 Tkinter GUI。它有一个用于搜索的条目,下面有一个结果列表框。 ListBox 也有一个滚动条。如何在不将焦点从搜索字段上移开的情况下使用鼠标和箭头键滚动以在 ListBox 中工作? IE 我希望用户能够键入搜索、滚动并继续键入,而不必在小部件之间来回切换。谢谢

【问题讨论】:

  • 我想我可以绑定鼠标和箭头按钮来手动进行滚动...daniweb.com/code/snippet217059.html 解释了鼠标滚动事件,箭头键很容易。所以现在我只需要知道将它们绑定到什么。

标签: python events listbox scroll tkinter


【解决方案1】:

向条目小部件添加绑定,当用户按下向上和向下键或使用向上/向下滚轮时调用列表框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")

【讨论】:

  • 这是有道理的。但是我如何明确地控制它们呢?到目前为止,我只使用了 mylistbox.config(yscrollcommand=myscrollbar.set) 和 myscrollbar.config(command=mylistbox.yview)。
  • @Jeff:我在回答中添加了一些示例代码来解决您的问题。
  • 谢谢!各种网站使它听起来很复杂,但是通过您的示例,它非常简单。
  • 一个错字。 self.entry.bind("&lt;Up&gt;", self.OnEntryDown) 应该改用 self.OnEntryUP
  • 改成self.OnEntryUp后,def OnEntryUP(self, event)也要修改成原来的样子。
猜你喜欢
  • 2020-04-28
  • 2017-04-18
  • 2022-10-06
  • 2011-05-03
  • 1970-01-01
  • 2011-04-11
  • 2020-02-09
  • 2017-09-23
  • 2015-06-11
相关资源
最近更新 更多