Tkinter列表框-如何禁用箭头键选择?

时间:2018-07-15 21:54:00

标签: python python-3.x tkinter

我有一个Python 3.7 tkinter GUI,在该GUI中,我已经为应用程序的主要部分实现了上下箭头键控件。在它旁边,我有一个列表框,它也以不同的方式控制应用程序,默认情况下,在选择了列表框之后,列表框选择将使用向上和向下箭头滚动。因此,在应用程序中使用列表框后,箭头键会在应用程序的主要部分和列表框中触发向上箭头事件。这触发我的应用程序通过将新数据加载到主应用程序中来响应列表框选择中的更改。这显然是不可接受的。

如何禁用tkinter的箭头键控制功能 列表框?

我尝试将列表框配置为不关注焦点,但这似乎并未禁用该功能。

编辑:

我通过将列表框的FocusIn事件绑定到立即关注其他内容的函数来解决此问题。这远非理想,因为代码现在将焦点放在其中,然后无缘无故地更改焦点。如果有一种方法可以完全禁用对窗口小部件的关注或禁用列表框键绑定,这将是首选解决方案。

from tkinter import *
class App:
    def __init__(self):
        self.root = Tk()
        self.dummy_widget = Label()
        self.lb = ListBox(master=self.root)  
        self.lb.bind("<FocusIn>", lambda event: self.dummy_widget.focus())

        # Additional setup and packing widgets...

if __name__ == '__main__':
    mainloop()

这看起来很“ hacky”,尽管可以很好地完成工作。

1 个答案:

答案 0 :(得分:0)

  

如何禁用tkinter的ListBox的箭头键控件功能?

在要覆盖它们的小部件中为要覆盖的事件创建自己的绑定。在该函数中执行任何您想做的事情(什么都不做),然后返回字符串break,这是防止事件进一步处理的记录方法。

有关绑定如何工作的更详细说明,请参见问题this answerBasic query regarding bindtags in tkinter。它描述了如何将字符插入到条目小部件中,但是该机制对于tkinter中的所有事件和小部件都是相同的。