- 博客(26)
- 问答 (1)
- 收藏
- 关注
原创 PyQt6 Graphic进阶实战:打造一个视觉恒定的可缩放矩形框
摘要:本文介绍了在开发可缩放场景中选择框控制点的实现方法,重点解决了点击穿透和视觉变形两大难题。通过重写shape()方法构建包含控制点的点击区域,并利用反向缩放原理保持控制点在不同缩放比例下的视觉一致性。文章提供了完整的PyQt6实现代码,展示了如何动态计算控制点尺寸、处理多视图场景,以及优化绘制效果,最终实现了一个交互稳定、视觉恒定的可调整矩形组件ResizableRectItem。
2026-03-28 18:33:45
334
原创 [特殊字符] PyQt6/PySide6 踩坑记:为什么 QGraphicsItem 的 mouseMoveEvent 不触发?
摘要:在PyQt6的QGraphicsView开发中,自定义图形项时经常遇到mouseMoveEvent不触发的问题。根本原因是在mousePressEvent中错误调用了父类方法,导致Qt事件传递机制被破坏。解决方法包括:1) 直接移除父类方法调用;2) 正确设置标志位并显式接受事件。关键点在于理解Qt事件处理流程,谨慎调用父类方法,并确保正确的事件接受和标志位设置。
2026-03-28 12:23:37
230
原创 【Python多线程截图】当 Python 多线程遇上底层 C 库——一次由“串图”引发的线程安全深度思考
本文探讨了Python多线程与底层C库交互时的线程安全问题。作者在开发多窗口游戏助手时,发现不同线程的实例会输出相同数据,经排查发现底层C扩展库使用了全局静态缓冲区,导致线程间数据污染。解决方案是在Python层引入类级别锁,强制串行化访问非线程安全的底层函数。文章揭示了GIL的局限性,强调Python线程安全不等同于整个程序栈的安全,并建议在调用非线程安全库时主动加锁,同时通过日志和调试验证数据隔离性。
2026-03-15 11:09:30
393
原创 [特殊字符] 在 PyQt6 中实现 Photoshop 风格的“橡皮擦”光标:高性能、不随缩放变形、精准跟随鼠标
本文介绍在PyQt6中实现类似Photoshop橡皮擦工具的高性能解决方案。传统方法使用QWidget作为橡皮擦会导致卡顿、缩放变形等问题。正确方法是在QGraphicsView的drawForeground中绘制橡皮擦,并通过painter.resetTransform()切换到设备坐标系,使橡皮擦大小固定、精准跟随鼠标移动。关键点包括:避免QWidget叠加、正确转换坐标系、使用save/restore保护绘制状态。最终方案实现了专业图像编辑软件的橡皮擦行为,解决了缩放变形、移动不同步等常见问题,同时保
2026-01-20 01:19:16
829
原创 轻量级 OCR 小工具开发指南:为什么几十 MB 的软件能自带 OCR?如何用 ONNX 打造自己的超小 OCR 工具?
本文揭示了如何用轻量级方案实现OCR功能,让小型工具也能内置高效的文字识别。关键在于将训练与推理分离:使用PyTorch训练模型后,通过ONNX格式导出,搭配轻量推理引擎(如ONNX Runtime)部署,可大幅减少体积至30MB左右。文中提供了PaddleOCR等优质预训练模型的获取方式、极简Python推理代码示例,以及优化建议(模型量化、裁剪OpenCV等)。相比依赖大型框架,这种方案更高效且跨平台,证明AI部署完全可以轻量化,让开发者轻松构建“小而美”的智能工具。
2026-01-15 21:39:54
910
原创 高效后台截图】Python 实现现代游戏窗口无闪烁、高性能 DX11/DX12 截图方案(附DLL资源)
本文介绍了一种基于DXGI技术的Python游戏窗口截图方案,可高效捕获现代DirectX 11/12游戏画面。传统截图方法因硬件加速和独占全屏模式而失效,该方案通过封装dxgi4py.dll实现后台无闪烁截图,支持返回NumPy数组便于AI处理。核心优势包括支持DX11/DX12游戏、无需激活窗口、低延迟高性能。文章提供了Python调用代码示例和技术原理简述,适用于游戏辅助、AI训练等场景。
2026-01-10 17:04:12
1672
24
原创 【PyQt6】探究 QGraphicsView 与 QPixmap/QImage 坐标错位问题,实现像素级精确对齐
摘要:Qt的QGraphicsView默认将整数坐标视为像素中心,而QImage以像素左上角为原点,导致鼠标点击时坐标错位。通过为QGraphicsPixmapItem设置setOffset(-0.5, -0.5),可将像素左上角对齐scene坐标,实现精确像素级交互。同时需关闭抗锯齿和图像平滑缩放,并限制为1:1缩放比例。该方法适用于图像标注、像素编辑等高精度场景,解决了Qt坐标模型与像素模型的冲突问题。(149字)
2026-01-07 00:50:50
1049
原创 pynput 监听器导致断点调试时鼠标卡死?揭秘 pynput 与 Windows 输入钩子的“致命暂停”
摘要: 在使用 pynput 监听鼠标事件时,若在 VS Code 断点调试中暂停程序,会导致鼠标和键盘卡死。原因是 pynput 通过 Windows 低级钩子(WH_MOUSE_LL)拦截输入事件,而调试暂停会阻塞钩子回调,触发系统输入流冻结。解决方案包括:调试前手动停用监听器、用日志替代断点、或按需启用监听。此现象是 Windows 的安全机制,需在开发中合理设计监听启停策略,避免影响调试体验。
2025-12-06 04:19:36
833
原创 Python 项目加密打包:从源码到混淆保护的实践
本文介绍了一种Python项目加密打包方案,通过编译字节码+加密+运行时解密的方式保护源代码。核心方法包括:1) 动态生成SHA3-512密钥;2) 对字节码进行异或加密并随机插入密钥;3) 输出自包含的加密文件;4) 使用runtime模块实现解密执行。该方案保留项目结构,简单有效但非高强度加密,适合防止普通用户查看源码,可通过结合C扩展或商业工具提升安全性。文章详细解析了实现原理和使用方法,并分析了方案的优缺点,为Python项目分发提供了一种实用的保护思路。
2025-11-19 00:56:15
1088
1
原创 Selenium 获取 Shadow DOM 内部元素时出现 `StaleElementReferenceException` 的问题排查与解决
本文详细记录了在使用 Selenium 自动化测试过程中遇到的一个特定问题:尝试获取 Shadow DOM 内部元素时抛出 `StaleElementReferenceException` 异常。通过一系列的排查,包括直接查找、JavaScript 脚本执行以及控制台测试,确定问题根源在于 ChromeDriver 对 shadow DOM 元素可达性的检查机制上。最终提供了一个有效的解决方案,即通过 JavaScript 修改目标节点的 `parentNode` 属性指向全局 `document` 来绕过
2025-05-15 23:32:56
1417
原创 Selenium 控制已运行的Edge和Chrome浏览器时卡住、报错问题解决记录
在使用 Selenium 控制已运行的 Chrome 或 Edge 浏览器时,可能会遇到程序卡住或报错的问题,通常是由于浏览器 User Data 目录冲突引起的。通过 --remote-debugging-port 参数启用远程调试时,如果已有浏览器实例占用了默认的 User Data 目录,Selenium 将无法启动新的浏览器实例。解决方法是使用 --user-data-dir 参数为 Selenium 指定一个独立的 User Data 目录,避免冲突。示例代码展示了如何配置独立的 User Dat
2025-05-15 20:27:35
1768
原创 Python自定义模块导入行为(添加预处理或后处理步骤)
自定义模块导入的行为(例如添加预处理或后处理步骤),你可以通过定义一个自定义的元路径查找器(meta path finder)和加载器(loader)来实现。列表中,这个查找器会检查所有导入请求,并决定是否以及如何处理它们。如果该查找器负责处理某个特定的导入请求,它将返回一个适当的加载器;否则,它应该让其他查找器有机会处理这个请求。中,使其能够拦截导入请求并根据需要应用自定义的加载行为。来处理某个模块的导入请求。并实现了必要的方法以加载模块。这里的基本思路是注册一个新的查找器到。
2025-04-28 01:24:57
267
原创 【无标题】
设置transformationAnchor和resizeAnchor为AnchorUnderMous,实现以鼠标位置为中心点的定点缩放功能
2024-09-19 18:53:51
468
原创 在安卓设备上运行Java版Minecraft并进入服务器教程
在安卓设备上运行Java版Minecraft并进入服务器教程,先安装FCL启动器,然后导入游戏包。
2024-08-09 21:46:32
4398
2
原创 【Strapi】在默认restful接口下批量增加/修改数据(多条)的最佳方法
本教程介绍了如何在Strapi中实现批量增加和修改数据的功能。通过创建一个全局中间件,我们可以捕获批量操作请求,并在后台执行相应的操作。这种方法可以提高开发效率和性能,适用于需要一次性处理多条数据的场景。通过详细的步骤指导,新手也能轻松理解和实施该功能。全局中间件的添加步骤已经得到修正,确保正确配置。通过本教程,你可以更好地利用Strapi的强大功能,实现高效的数据管理。
2024-01-27 02:25:39
2045
原创 使用Strapi批量写入数据的方法,REST API批量写入/修改数据
Strapi默认生成的REST API不支持批量操作,解决办法——重写核心服务,在create函数中判断传入的数据类型,如果是数组则逐个写入数据库,避免了每次新增数据都需要重复请求API的情况。
2023-05-08 21:50:15
1438
1
原创 ChatGPT-Free 保姆级使用指南
chatgpt的保姆级使用指南,从对话的底层原理透析promot的本质,以方法论带你创造有效的promot,加倍提高生产力。
2023-05-05 09:02:58
6956
2
原创 Vue项目中,如何实现HTML标签后,修改标签内的文本
在Vue.js中,我们可以使用指令来绑定事件和响应用户交互。在updateText方法中,让span标签变成可编辑状态,并让它获取焦点。这样,在用户双击span标签时,就可以直接在页面上编辑文本了。在saveText方法中,将用户编辑后的文本保存到Vue实例的data中,并让span标签变回不可编辑状态。以上就是在Vue.js项目中实现用户双击一个span标签后,可以修改标签内的文本的方法。本文将讲解如何在Vue.js项目中实现用户双击一个span标签后,可以修改标签内的文本。
2023-03-29 23:38:55
3290
原创 Vue3中如何使用ref属性将子组件实例绑定到非顶层变量(<script setup> )
在Vue3中如何使用ref属性进行父子组件通信。使用ref属性可以方便地获取子组件实例,在父组件中访问暴露的属性和方法。同时,还介绍了如何将子组件实例传递到非顶层变量中。掌握ref属性的正确使用方法可以提高代码可读性和重用性。
2023-03-28 22:02:25
821
原创 在 Vue 3.x 中使用setup语法糖时,如何访问子组件中定义的变量
在 Vue 3.x 中,我们可以通过propsref和来访问子组件中定义的变量或方法。其中,props适用于父子组件之间的数据传递;ref适用于访问子组件中的实例,进而访问子组件中的变量或方法;适用于将子组件中的变量或方法暴露给父组件。
2023-03-15 23:51:17
1370
原创 【最新】使用VSCode调试【Vue、React】前端项目的最佳解决方案
使用VSCode调试【Vue、React】前端项目的最佳解决方案 2步搞定
2023-03-05 13:59:18
2528
原创 在VScode中调试Vue3+Vite+ts的方法
在VScode中调试Vue3+Vite+ts的方法添加launch.json,执行命令 pnpm dev;点击左侧导航栏运行和调试按钮,开始调试
2022-12-09 00:18:11
6276
原创 【python】分享一个在Windows下对应用程序python窗口后台截图的方法
最近心血来潮想自己用python写一个图色操作游戏的脚本,于是上百度一查“python后台截图”,事实上能用的也就是pywin32读取内存截图(什么设备环境、设备描述表、内存设备描述表的),而且翻来翻去就是这一套代码。类似这个:#获取后台窗口的句柄,注意后台窗口不能最小化hWnd = win32gui.FindWindow("NotePad",None) #窗口的类名可以用Visual Studio的SPY++工具获取#获取句柄窗口的大小信息left, top, right, bot = w
2022-01-03 04:53:39
12904
11
原创 【Vue3-状态管理】(如何在组件外部访问 根组件/子组件 的响应式数据)多个组件间如何统一的管理响应式数据
经常被忽略的是,Vue 应用中响应式data对象的实际来源——当访问数据对象时,一个组件实例只是简单的代理访问。所以,如果你有一处需要被多个实例间共享的状态,你可以使用一个reactive方法让对象作为响应式对象。const { createApp, reactive } = Vueconst sourceOfTruth = reactive({ message: 'Hello'})const appA = createApp({ data() { return sou...
2021-12-13 23:33:23
1247
转载 终于,JavaScript也有了类(class)的概念
对于class类这个概念,我相信学过编程的人应该对他见多不怪了,因为在其他的编程语言中很早就实现了,而JavaScript语言并没有实现,一直以来,开发人员都是使用function和原型prototype来模拟类class实现面向对象的编程.接下来的学习,前端君默认大家都了解传统的模拟类的写法,如果你已经忘记了,ES6系列的第九节有介绍JavaScript的面向对象,点击可以查看。现在,ES6给我们带来了好消息,它给JavaScript带来了类class的概念。但实际上,JavaScript的类cl
2021-12-12 22:24:35
698
原创 关于JavaScript在对象{}内部定义函数的几种方式(ES6的极简之美)
最近初学Vue.js,对JavaScript中函数、对象的运用方式颇受启发,先看以下代码:HTML:<div id="counter"> Counter: {{ counter }}</div>JS: const Counter = { data() { return { counter: 0 } }, mounted()
2021-11-26 01:36:21
1749
封装脚本:支持普通DOM和shadowDom内部元素的查找
2025-05-16
selenium封装脚本:支持普通DOM和shadowDom内部元素的查找
2025-05-16
PyInstaller打包的exe内部执行eval()
2021-06-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅