Tkinter绑定鼠标双击

meh*_*123 6 python tkinter key-bindings

我正在尝试将鼠标双击绑定到一个函数,该函数现在只是在Tkinter列表框中打印当前选择.要清楚,该功能只应在用户双击Tkinter列表框中的一个项目时打印.我应该使用什么事件绑定?

iCo*_*dez 11

你可以绑定到<Double-Button-1>:

widget.bind('<Double-Button-1>', handler)
Run Code Online (Sandbox Code Playgroud)

还可以<Button-1>进行正常的鼠标点击和<Triple-Button-1>三次鼠标点击.

有关Tkinter中绑定的更多信息,请参阅事件和绑定.

  • 请注意,如果您有单击*和*双击的绑定,则两个绑定都会被调用。 (2认同)

Gar*_*127 7

您必须意识到所有小部件都有一个层次结构,这意味着对于您单击的每个小部件,可以进行多个绑定。如果您不覆盖默认操作,则会调用每个层次结构的默认处理程序,从最低级别(例如您的Listbox)开始,一直到Tk()Toplevel()小部件。对于您来说,由于您只想在单击列表框项时进行打印,因此可以绑定到列表框小部件,如下所示:

listboxWidget.bind('<Double-Button-1>', listboxWidget_leftclick_handler)
Run Code Online (Sandbox Code Playgroud)

然后,当您输入该def listboxWidget_leftclick_handler(event)函数时,您不必检查该event.widget值来查看它是否是您的小部件的名称Listbox。但您也可以在更高级别进行检查(将处理程序绑定到更高级别的小部件)并检查event.widget单击了哪个小部件。

另请注意,防止触发整个事件处理程序层次结构的唯一方法是使用return 'break'自定义处理程序中的 a ,但通常仅当后续处理程序破坏了自定义处理程序所做的操作时才需要执行此操作。

有关默认处理程序的附加信息

我遗漏的另一部分是大多数事件还有一个“默认”处理程序。如果您绑定自己的处理程序,一旦完成,如果您不绑定return 'break',则接下来将调用默认处理程序。

例如,假设您想将自己的输入框设置为密码条目。默认情况下,当您在 Entry 具有焦点(这意味着它从键盘获取输入)时键入字母数字字符时,这些字符将出现在Entry. 您可以绑定:

myEntry.bind('<KeyPress>', passworder)
Run Code Online (Sandbox Code Playgroud)

您的自定义处理程序在哪里passworder,它捕获保存您输入的字符的事件,然后将星号输出到其中Entry。但是,如果您不在return "break"处理程序末尾使用 a,Entry小部件仍然会看到您不想显示的字符,因为一旦您的处理程序完成插入星号,默认处理程序将简单地插入输入 char (就像通常一样)。但是,如果您执行return 'break',则不会调用默认处理程序,并且类型化的字符不会出现在Entry.