我正在尝试将鼠标双击绑定到一个函数,该函数现在只是在Tkinter列表框中打印当前选择。要清楚,该功能只应在用户双击Tkinter列表框中的一个项目时打印。我应该使用什么事件绑定?
答案 0 :(得分:8)
您可以绑定到<Double-Button-1>
:
widget.bind('<Double-Button-1>', handler)
正常鼠标点击还有<Button-1>
,鼠标点击三次点击<Triple-Button-1>
。
有关Tkinter中绑定的更多信息,请参阅Events and Bindings。
答案 1 :(得分:1)
您必须意识到所有小部件都有一个层次结构,这意味着对于您单击的每个小部件,可以进行多个绑定。如果您不覆盖默认操作,则会从最低级别(例如您的列表框)开始调用每个层次结构的默认处理程序,并一直向上移动到Tk()或Toplevel()小部件。对于您而言,由于您只想在单击列表框项目时进行打印,因此可以绑定到列表框小部件,如下所示:
listboxWidget.bind('<Double-Button-1>', listboxWidget_leftclick_handler)
然后,当您输入def listboxWidget_leftclick_handler(event)
函数时,您不必检查event.widget值以查看它是否是您的Listbox小部件的名称。但您也可以检查更高级别(将处理程序绑定到更高级别的小部件)并检查event.widget以查看单击了哪个小部件。
另请注意,阻止事件处理程序的整个层次结构触发的唯一方法是使用自定义处理程序中的return 'break'
,但如果以后的处理程序损坏了自定义处理程序所执行的操作,通常只需执行此操作。 / p>
有关默认处理程序的其他信息
我遗漏的另一部分是还有一个&#34;默认&#34;处理大多数事件。如果你绑定自己的处理程序,一旦完成,如果你不是return 'break'
,则接下来会调用默认的处理程序。
例如,假设您要将自己的“输入”框设置为密码条目。默认情况下,当Entry具有焦点时键入字母数字字符(这意味着它从键盘输入),字符将出现在条目中。你可以绑定
myEntry.bind('<KeyPress>', passworder)
其中 passworder(事件)是您的自定义处理程序,它会抓取保存您输入的字符的事件,然后输入星号进入条目。但是,如果你不在处理程序的末尾使用return "break"
,那么Entry小部件仍然会看到你不想显示的字符,因为一旦你的处理程序完成插入星号,默认处理程序将简单地插入类型化的char(就像通常那样)。但是,如果您执行return 'break'
,则默认处理程序不会被调用,并且键入的字符不会出现在条目中。
答案 2 :(得分:0)
作为附加组件。为了区分单击和双击之间的操作,请在短时间内将调用延迟到鼠标操作,以允许设置双击标记。见下面的例子:
<a href="/images/myw3schoolsimage.jpg" download>
答案 3 :(得分:-1)
好,要使用鼠标事件(单击或双击),最好的库是pyautogui。 工作原理:
import pyautogui
pyautogui.doubleClick(your Coordinates)
在这种情况下,坐标将类似于X和Y。例如(X垂直位置,Y水平位置)