Tkinter:你能看到一个小部件的所有绑定吗?

Edw*_*emo 4 python tkinter python-3.x

在我的应用程序中,我想在两种状态之间切换,并且在每个状态中我想要 -> 不希望绑定各种键。

现在我所做的是在我的类中创建了一个属性self.bindings = [],然后我有一个创建绑定的方法:

def _create_bindings(self):
    self.bind("<Button-1>", self._canvas_on_click)
    self.bindings.append("<Button-1>")
    self.bind("<Double-Button-1>", self._canvas_on_2click)
    self.bindings.append("<Double-Button-1>")
    self.bind("<<arrow>>", self._canvas_on_arrows)
    self.bindings.append("<<arrow>>")
    self.bind("<space>", lambda event: self._toggle_selected())
    self.bindings.append("<space>")
    self.bind("<Key>", self._canvas_on_key_press)
    self.bindings.append("<Key>")
    self.bind("<BackSpace>", lambda event: self._empty_cell())
    self.bindings.append("<BackSpace>")
    self.bind("<Escape>", self._esc)
    self.bindings.append("<Escape>")
Run Code Online (Sandbox Code Playgroud)

然后删除它们:

def _remove_bindings(self):
    for b in self.bindings:
        self.unbind(b)
Run Code Online (Sandbox Code Playgroud)

这并不可怕,但它确实会导致一些重复(请参阅创建函数:创建绑定+添加到列表)。

我可以创建一个包装器来组合这两个步骤,但无论如何我仍然需要管理一个额外的属性。

是否有一个我可以调用的函数可以为我提供与self.bindings上面相同的信息?

Bry*_*ley 5

如果您调用bind不带任何参数的方法,它将返回您为该小部件绑定的所有事件的列表。你的_remove_bindings可能看起来像这样:

def _remove_bindings(self):
    for event in self.bind():
       self.unbind(event)
Run Code Online (Sandbox Code Playgroud)