> 技术文档 > 今天尝试用《python pyside6》 开发一个实时监测鼠标位置变化的小程序_python写一个鼠标捕获器

今天尝试用《python pyside6》 开发一个实时监测鼠标位置变化的小程序_python写一个鼠标捕获器


今天尝试用《python pyside6》 开发一个实时监测鼠标位置变化的小程序

本实例演示了如何使用PySide6库创建一个界面应用程序,实时获取鼠标坐标并展示在窗口中。通过导入pyautogui和keyboard库,实现了实时监测鼠标位置和控制窗口功能。主要包括创建窗口界面、复制函数、更新鼠标位置函数、关闭鼠标检测函数和按钮的槽函数等内容。整体代码结构清晰,功能完善,为实时监测鼠标坐标提供了一个友好的界面。希望这个功能性强大且易于使用的程序能够对您的工作或学习有所帮助!

资源文件放在文章最后

一、首先导入需要的库文件

本次实例中主要需要用到的库有pyautogui、keyboard、pyside6,可以在终端中输以下代码进行安装:

bashpip install pyautoguipip install keyboardpip install pyside6

如果是pycharm中的虚拟环境的话,那么就使用pycharm中的包管理器进行安装,按下快捷键ctrl+shift+s,然后找到项目解释器,点击左上角的“+”号键,进行库文件的安装,如果你的pycharm版本够高的话也可直接在代码界面找到packge包管理工具,配置好镜像源之后,直接搜索库文件名称进行安装。

import randomimport sysimport timeimport pyautogui as paimport keyboardfrom PySide6.QtCore import Qt, QTimerfrom PySide6.QtGui import QFont, QKeySequence, QIconfrom PySide6.QtWidgets import (QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget, QHBoxLayout, QPushButton, QLabel, QLineEdit, QSizePolicy)

2.下面是主程序中的源码

(1)界面窗口类

首先要创建的就是窗口界面,本程序中用的是pyside6做的窗口部分

class MainWindow(QMainWindow): def __init__(self): super().__init__() # 设置窗口标题 self.setWindowTitle(\"实时获取鼠标坐标\") # 设置窗口初始尺寸 self.setFixedSize(300,100) self.setStatusBar(None) self.setWindowIcon(QIcon(\"shubiao.ico\"))# 支持 .ico/.png 等格式 # 禁用最大化和最小化按钮 self.setWindowFlags( Qt.Window | # 基础窗口类型 Qt.CustomizeWindowHint | # 允许自定义窗口 Qt.WindowTitleHint | # 显示标题栏 Qt.WindowCloseButtonHint # 仅保留关闭按钮 ) #设置中心空间并建立窗口主布局 central_widget = QWidget() self.setCentralWidget(central_widget) vlayout = QVBoxLayout(central_widget) vlayout.setContentsMargins(0, 0, 0, 0) # 主布局边距清零 vlayout.setSpacing(0) # 主布局间距清零#------------------------------------------------ self.xlab=QLabel(\"x坐标为:\") self.ylab=QLabel(\"y坐标为:\") font=QFont() font.setPointSize(10) self.xtext=QLineEdit() self.xtext.setFixedHeight(30) self.xtext.setFont(font) self.xtext.setReadOnly(True) # 禁止编辑 self.xtext.setText(\"0\") # 设置默认文本 # self.xtext.setFocusPolicy(Qt.NoFocus) # 禁止获取焦点 self.ytext=QLineEdit() self.ytext.setFixedHeight(30) self.ytext.setFont(font) self.ytext.setReadOnly(True) # 禁止编辑 self.ytext.setText(\"0\") # 设置默认文本 # self.xtext.setFocusPolicy(Qt.NoFocus) # 禁止获取焦点 self.copy_btn=QPushButton(\'复制\') self.copy_btn.setShortcut(\"Ctrl+C\") self.copy_btn.clicked.connect(self.copy) self.buhuo_btn=QPushButton(\'捕获鼠标坐标\') self.buhuo_btn.setShortcut(\"Ctrl+B\") self.timer=QTimer() self.buhuo_btn.clicked.connect(self.buhuo) btn_layout = QVBoxLayout() btn_layout.addWidget(self.copy_btn) btn_layout.addWidget(self.buhuo_btn) zuobiao_laiout=QHBoxLayout() zuobiao_laiout.addWidget(self.xlab) zuobiao_laiout.addWidget(self.xtext) zuobiao_laiout.addWidget(self.ylab) zuobiao_laiout.addWidget(self.ytext) zuobiao_laiout.addLayout(btn_layout) self.guding_btn=QPushButton(\"固定窗口\") self.guding_btn.clicked.connect(self.guding) self.tingzhi = QPushButton(\"停止捕获(ESC)\") self.tingzhi.clicked.connect(self.top) self.zuozhe_label = QLabel() self.zuozhe_label.setText(\'作者:非门由也\') # 设置标签的尺寸策略为水平扩展 self.zuozhe_label.setSizePolicy( QSizePolicy.Expanding, # 水平方向:允许扩展 QSizePolicy.Preferred # 垂直方向:保持默认 ) self.zuozhe_label.setFixedHeight(20) chuangkou_btn_layout=QHBoxLayout() chuangkou_btn_layout.addWidget(self.guding_btn) chuangkou_btn_layout.addStretch() chuangkou_btn_layout.addWidget(self.tingzhi) a_layout = QHBoxLayout() a_layout.addStretch() a_layout.addWidget(self.zuozhe_label) a_layout.addStretch() vlayout.addLayout(zuobiao_laiout) vlayout.addLayout(chuangkou_btn_layout) vlayout.addStretch() vlayout.addLayout(a_layout)

(2)定义copy函数,实现文本复制

 def copy(self): x=self.xtext.text() y=self.ytext.text() copy_text=f\"{x},{y}\" clipboard = QApplication.clipboard() clipboard.setText(copy_text)

(3)定义更新鼠标位置的函数

 def update_mouse_pos(self): x, y = pa.position() # 确保正确导入 pyautogui as pa self.xtext.setText(str(x)) self.ytext.setText(str(y)) print(x, y) if keyboard.is_pressed(\'esc\') : self.timer.stop() # 停止定时器

(4)关闭鼠标检测

 def closeEvent(self, event): self.time.stop() # 确保关闭窗口时停止定时器 super().closeEvent(event) def top(self): self.timer.stop()

(5)\"捕获鼠标\"按钮的槽函数

 def buhuo(self): self.timer.timeout.connect(self.update_mouse_pos) self.timer.start(100) # 每 300ms 触发一次

(6) “固定窗口”按钮的槽函数

 def guding(self): # 切换置顶状态 is_topmost = self.windowFlags() & Qt.WindowStaysOnTopHint self.setWindowFlag(Qt.WindowStaysOnTopHint, not is_topmost) self.show()

3.程序入口

为了能够在编写代码时,实时检测代码运行情况,我们可以写一个程序入口函数,对当前主程序中已经在函数或者类中进行封装的代码进行实时监测,也就是说,可以在入口处调用函数或对象类,看看他们是不是有什么错误,也可以借此对代码进行一些修改,实现前期的代码运行测试。

if __name__ == \"__main__\": # 创建应用程序对象 app = QApplication(sys.argv) # 创建主窗口实例 main_window = MainWindow() #固定窗口在最上方 # main_window.setWindowFlags(main_window.windowFlags() | Qt.WindowStaysOnTopHint) # 显示窗口 main_window.show() # 启动应用程序事件循环 sys.exit(app.exec())

最后,在本次的程序里面,我们写下如下的程序入口,由于是窗口界面类,所以 要把调用语句写在“if name == “main”:”里面,运行程序,效果如图:

今天尝试用《python pyside6》 开发一个实时监测鼠标位置变化的小程序_python写一个鼠标捕获器

最后做一次总结

在本实例中,我们首先导入了需要使用的库文件,包括pyautogui、keyboard和PySide6,并介绍了如何在终端或PyCharm中进行库文件的安装。然后我们定义了一个主窗口类,实现了实时获取鼠标坐标的功能。主要包括创建窗口界面、定义复制函数、更新鼠标位置函数、关闭鼠标检测函数、捕获鼠标按钮和固定窗口按钮的槽函数等内容。最后,在程序入口处创建了应用程序对象、主窗口实例并启动应用程序事件循环。

总体来说,本实例实现了一个简单的实时获取鼠标坐标的功能,并通过窗口界面友好地展示了坐标信息。通过复制按钮可以方便地复制坐标信息,通过固定窗口按钮可以控制窗口置顶。整体代码结构清晰,功能完善。希望本次实例对您的学习有所帮助!

资源文件地址:鼠标坐标.exe 验证码:91gy