python实现鼠标实时坐标监测
一、说明
使用了以下技术和库:
tkinter
:用于创建GUI界面。pyperclip
:用于复制文本到剪贴板。pynput.mouse
:用于监听鼠标事件,包括移动和点击。threading
:用于创建多线程,以便在后台执行鼠标事件监听和标签更新的任务。time
:用于控制线程休眠,以定时更新标签文本。
二、代码
# coding=gbk # 指定文件编码为GBK
import tkinter as tk # 导入tkinter库,用于创建GUI界面
import pyperclip # 导入pyperclip库,用于复制文本到剪贴板
from pynput import mouse # 导入pynput库的mouse模块,用于监听鼠标事件
import threading # 导入threading库,用于创建多线程
import time # 导入time库,用于线程休眠# 创建一个MouseCoordinateApp类,用于处理鼠标坐标显示和复制
class MouseCoordinateApp:def __init__(self):self.root = tk.Tk() # 创建一个Tkinter窗口self.root.title("鼠标坐标实时展示") # 设置窗口标题self.root.geometry("350x80") # 设置窗口大小self.root.resizable(False, False) # 禁止窗口大小调整self.label = tk.Label(self.root, text="单机截取坐标:X: - , Y: -\n实时坐标:X: - , Y: -") # 创建一个标签控件self.label.pack() # 将标签控件添加到窗口copy_button = tk.Button(self.root, text="复制坐标", command=self.copy_coordinates) # 创建一个按钮控件copy_button.pack() # 将按钮控件添加到窗口self.root.attributes("-topmost", True) # 设置窗口置顶self.extracted_coordinates = (0, 0) # 初始化截取坐标self.current_coordinates = (0, 0) # 初始化实时坐标self.last_extracted_coordinates = (0, 0) # 初始化上一次截取的坐标self.update_interval = 0.1 # 更新标签的时间间隔threading.Thread(target=self.start_mouse_listener, daemon=True).start() # 创建并启动鼠标事件监听的线程threading.Thread(target=self.update_label_thread, daemon=True).start() # 创建并启动标签更新的线程def copy_coordinates(self):x, y = self.last_extracted_coordinates # 获取上一次截取的坐标coordinates = f"X: {x}, Y: {y}" # 格式化坐标文本pyperclip.copy(coordinates) # 复制坐标文本到剪贴板self.label.config(text=f"已复制坐标:{coordinates}") # 更新标签文本def start_mouse_listener(self):with mouse.Listener(on_move=self.on_move, on_click=self.on_click) as listener:listener.join() # 启动鼠标事件监听def on_move(self, x, y):self.current_coordinates = (x, y) # 更新实时坐标def on_click(self, x, y, button, pressed):if pressed:self.last_extracted_coordinates = self.extracted_coordinates # 更新上一次截取的坐标self.extracted_coordinates = (x, y) # 如果鼠标被按下,更新截取坐标def update_label_thread(self):while True:time.sleep(self.update_interval) # 线程休眠一段时间self.update_label() # 更新标签文本def update_label(self):extracted_x, extracted_y = self.extracted_coordinates # 获取截取坐标current_x, current_y = self.current_coordinates # 获取实时坐标self.label.config(text=f"截取坐标:X: {extracted_x}, Y: {extracted_y}\n实时坐标:X: {current_x}, Y: {current_y}")def run(self):self.root.mainloop() # 启动主程序的主循环if __name__ == "__main__":app = MouseCoordinateApp() # 创建MouseCoordinateApp实例app.run() # 启动应用程序的主循环