python鼠标事件没发生_鼠标事件的异常处理

我试图通过在画布上绘制光标来模拟光标,并根据运动事件移动它。在

根据文档“除了Enter和Leave”,不按按钮就不会发生鼠标移动事件。然而,Tkinter接受绑定到事件,这似乎是我想要的,除了一件事:您必须首先单击根窗口中的某个地方,才能启动。{{1>如果没有重入一次,窗口将永远不会丢失。在

这种行为与我的目标不符(也令人费解,为什么会有人想要呢?)所以我编写了一个小程序,看看是否可以更改它,也许可以使用event_generate。我还不能,但在这个过程中,我发现Tkinter对鼠标事件的处理有点模糊。首先,它经常会漏掉和{}(你把指针移出去,它仍然认为它在里面,反之亦然)。更令人惊讶的是:有时,当您将指针移入时,它会触发和一两个{}事件,而不单击根窗口。然后它就安静了:在您单击之前,不会再有事件。您可以用下面的代码重现这些问题。我在运行OS X El Capitan,Python2.7。在

任何关于这些行为的解释,或者关于如何在不点击的情况下跟踪运动事件的想法都将受到赞赏。在from Tkinter import *

def enter(e):

if e.widget is not canvas:

print " caught by", e.widget

if canvas.state != "outside":

print " in 'inside' state!"

canvas.state = "inside"

canvas.n = 0

canvas.itemconfig(inout, text=canvas.state)

canvas.itemconfig(count, text="no motions yet")

canvas.event_generate('', x=e.x, y=e.y, state=0x0100)

#canvas.update()

def motion(e):

if canvas.state == "outside":

print " in 'outside' state!"

canvas.n += 1

canvas.itemconfig(count, text="motions since enter: {:03d}".format(canvas.n))

#canvas.update()

def leave(e):

if e.widget is not canvas:

print "Leave caught by", e.widget

if canvas.state == "outside":

print " in 'outside' state!"

canvas.state = "outside"

canvas.itemconfig(inout, text=canvas.state)

canvas.itemconfig(count, text="")

#canvas.update()

root = Tk()

frame = Frame(root)

frame.pack(fill=BOTH)

canvas = Canvas(frame, bg='#E4E4E4', highlightthickness=0)

canvas.grid(row=0, column=0, sticky=W+E+N+S)

canvas.create_text(140, 20, text="(tracking , , )")

inout = canvas.create_text(140, 100, text="outside")

count = canvas.create_text(140, 120, text="")

canvas.n = 0

canvas.state = "outside"

canvas.bind('', enter)

canvas.bind('', motion)

canvas.bind('', leave)

canvas2 = Canvas(frame, height=100, highlightthickness=0)

canvas2.grid(row=1, column=0, sticky=W+E)

canvas2.create_text(140, 50, text="(no tracking here)")

frame.rowconfigure(0, weight=1)

def focusout(e):

print "root lost focus"

root.bind('', focusout)

root.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值