python tkinter 实现鼠标按下和弹起事件监测

1、本来准备使用pyhook的,结果python3下存在兼容性问题,鼠标会卡死,劝退!气愤+1!

2.然后准备使用据说好用的pyhook3或pywinhook,结果安装出问题,又是什么swig又是什么c++运行库,成功把我劝退!气愤+2!

3.最后迫不得已用了一个折衷的方案,还可以检测鼠标的实时位置:

# -*- coding: UTF-8 -*-
 
from pynput.mouse import Listener
from tkinter import *
import tkinter as tk

global btstate
global btstate1

def on_hover():
	global btstate
	print("mouse over")
	btstate=1
	
def on_leave():
	global btstate
	print("mouse leave")
	btstate=0

def on_hover1():
	global btstate1
	print("mouse over")
	btstate1=1
	
def on_leave1():
	global btstate1
	print("mouse leave")
	btstate1=0
	
def callback(event):
    x = event.x
    y = event.y
    textvar= "移动位置-x:{},y:{}".format(x,y)
    var.set(textvar)

def on_click(x, y, button, is_press):
	global btstate
	global btstate1
	# print(f"鼠标{button}键在({x}, {y})处{'按下' if is_press else '松开'}")
	if is_press and btstate==1:
		print("press button1!")
	elif  btstate==1:
		print("release button1!")
		
	if is_press and btstate1==1:
		print("press button2!")
	elif  btstate1==1:
		print("release button2!")
		

root = Tk()
root.title("tk鼠标按下和弹起事件")
root.geometry("400x300")


B = tk.Button(root, text ="点我")
B.pack()
B.bind('<Enter>',lambda event :on_hover())
B.bind('<Leave>',lambda event :on_leave())

C = tk.Button(root, text ="点我")
C.pack()
C.bind('<Enter>',lambda event :on_hover1())
C.bind('<Leave>',lambda event :on_leave1())

listener = Listener(on_click=on_click)
listener.start()

x,y=0,0
var = StringVar()
text = "移动位置-x:{},y:{}".format(x,y)
var.set(text)

lab = Label(root,textvariable=var)
lab.pack(anchor=S,side=RIGHT,padx=10,pady=10)
root.bind("<Motion>",callback)

root.mainloop()

好了就这样,希望对大家有帮助!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值