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

python tkinter 实现鼠标按下和d起事件监测,第1张

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鼠标按下和d起事件")
root.geometry("400x300")


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

C = tk.Button(root, text ="点我")
C.pack()
C.bind('',lambda event :on_hover1())
C.bind('',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("",callback)

root.mainloop()

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/607318.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-14
下一篇 2022-04-14

发表评论

登录后才能评论

评论列表(0条)

保存