一、如何把python代码编译成exe

1、将你的python文件my.py放在python安装目录下(C:\Users\Administrator\AppData\Local\Programs\Python\Python312)。

在命令行中导航到你的 Python 脚本所在的目录:cd C:\Users\Administrator\AppData\Local\Programs\Python\Python312

(如果 不在C盘,则执行:cd /d 路径)

2、在命令行中执行以下命令:

pyinstaller --onefile --noconsole --icon=xx.ico my.py

  • --onefile:将所有依赖打包成一个单独的 .exe 文件。
  • xx.ico 是你的图标文件(必须是 .ico 格式)。
  • 如果你的程序是 GUI 程序(例如使用 tkinter),可以通过 --noconsole 参数隐藏控制台窗口
  • my.py:你的 Python 脚本文件名。
  • 打包完成后,生成的 .exe 文件会位于 dist 文件夹中

补充说明:

你的python文件不放在python安装目录下也行,只需用 cd /d 路径  导航到你的python文件目录下,再执行pyinstaller --onefile --noconsole --icon=xx.ico my.py

就行

二、如何用Python 的标准 GUI 库Tkinter制作窗口按钮编辑框

三、模拟按键

四、模拟鼠标点击

五、后台模拟操作

使用 win32gui  win32api 进行后台操作是通过调用 Windows API 实现的。这些库允许你直接与 Windows 操作系统交互,例如查找窗口、发送消息、模拟键盘和鼠标输入等。以下是对 win32gui  win32api 的详细解说,包括安装、基本用法和示例代码。

win32gui  win32api  pywin32 库的一部分。首先需要安装 pywin32

pip install pywin32

安装完成后,你可以通过以下方式导入模块:

import win32gui

import win32con

import win32api

3. 常用函数

查找窗口

  • FindWindow(className, windowName):根据类名或窗口标题查找窗口句柄。
    • className:窗口类名(可以为 None)。
    • windowName:窗口标题(可以为 None)。

发送消息

  • SendMessage(hwnd, msg, wParam, lParam):向指定窗口发送消息。
    • hwnd:目标窗口句柄。
    • msg:消息类型(如 WM_KEYDOWNWM_LBUTTONDOWN)。
    • wParam  lParam:消息的附加参数。

获取窗口信息

  • GetWindowRect(hwnd):获取窗口的位置和大小。
  • GetWindowText(hwnd):获取窗口的标题。
  • GetClassName(hwnd):获取窗口的类名。

4. 根据鼠标所在位置获取窗口句柄

可以通过鼠标的当前位置获取窗口句柄(HWND)。使用 win32gui 库中的 WindowFromPoint 函数可以实现这一功能。

函数原型: HWND WindowFromPoint(POINT Point)

  • Point:一个包含 x  y 坐标的结构体。
  • 返回值:窗口句柄(HWND)。

WindowFromPoint 返回的是最顶层的窗口句柄。。如果需要进一步操作子窗口,可以结合 ChildWindowFromPoint  RealChildWindowFromPoint。这种方法非常适合需要与特定窗口或控件交互的自动化任务。

 示例代码

 示例 1:查找窗口并获取窗口信息

示例 2:后台发送按键

示例 3:后台发送鼠标点击

示例 4:后台输入文本

SendMessage(hwnd, msg, wParam, lParam)函数详细解

参数说明

1. hWnd

  • 类型HWND
  • 说明:目标窗口的句柄(Handle to Window)。窗口句柄是 Windows 系统中唯一标识一个窗口的值。

2. Msg

  • 类型UINT
  • 说明:要发送的消息类型。Windows 定义了许多标准消息,例如:
    • WM_KEYDOWN:按键按下。
    • WM_KEYUP:按键释放。
    • WM_LBUTTONDOWN:鼠标左键按下。
    • WM_LBUTTONUP:鼠标左键释放。
    • WM_CLOSE:关闭窗口。
    • WM_SETTEXT:设置窗口或控件的文本。

3. wParam

  • 类型WPARAM
  • 说明:消息的附加信息,具体含义取决于 Msg
  • 示例
    • 对于 WM_KEYDOWN 消息,wParam 是虚拟键码(如 VK_RETURN 表示回车键)。
    • 对于 WM_SETTEXT 消息,wParam 通常为 0

4. lParam

  • 类型LPARAM
  • 说明:消息的附加信息,具体含义取决于 Msg
  • 示例
    • 对于 WM_KEYDOWN 消息,lParam 包含按键的重复计数、扫描码等信息。
    • 对于 WM_LBUTTONDOWN 消息,lParam 包含鼠标点击的坐标(低 16 位为 x 坐标,高 16 位为 y 坐标)。

返回值

  • 类型LRESULT
  • 说明:返回值取决于发送的消息类型。通常用于获取操作的结果。
  • 示例
    • 发送 WM_GETTEXT 消息时,返回值是复制的字符数。

Windows 编程中,wParam 的值通常与虚拟键码(Virtual Key Code)相关。虚拟键码是 Windows 定义的一组常量,用于表示键盘上的按键。通常以 VK_ 开头。以下是一些常见的虚拟键码:

  • 需要注意的是,win32con 模块中定义了一些常见的虚拟键码常量,如:
  • win32con.VK_RETURN:回车键。
  • win32con.VK_SHIFTShift 键。
  • win32con.VK_CONTROLCtrl 键。
  • win32con.VK_MENUAlt 键。

对于字母键、数字键等,win32con 没有直接定义常量,你需要使用值的方式来使用,比如

VK_A=0x41       #A

VK_A=0x42       #B

六、注册热键

keyboard 是一个简单易用的库,支持热键注册和全局键盘事件监听。

安装 keyboard

Pip install keyboard

说明

  • keyboard.add_hotkey(hotkey, callback):注册热键并绑定回调函数。
    • hotkey:热键组合,例如 'ctrl+shift+a'
    • callback:热键触发时调用的函数。
  • keyboard.wait(key):阻塞程序,直到按下指定键(如 'esc')。

七、读写ini配置项

 1.创建新的配置文件

2.  读取配置项

3.写入配置项

4、处理不同类型的值

configparser 默认将所有值读取为字符串。如果你需要其他类型的数据(如整数、布尔值),你需要手动转换:

server_alive_interval = int(config['DEFAULT']['ServerAliveInterval'])

compression = config['DEFAULT'].getboolean('Compression')

5、处理不存在的配置项

如果尝试访问不存在的配置项,configparser 会抛出 KeyError。为了避免这种情况,可以使用 get() 方法并提供默认值:

user_age = config['user'].get('Age', 'Unknown')

print(f"User Age: {user_age}")

八、创建线程、启动线程、结束线程

九、实践案例:开发批量修图工具

十、创建超级列表框

十一、打开文件(通用对话框)

十二、置剪辑板文本

另一种置剪辑板文本的方法(更好):

import pyperclip

pyperclip.copy(text)  #将文本添加到剪辑板

十三、给超级列表框(tree)添加右键菜单

十四、实践案例:开发自动录入工具

十五、载入新窗口与时钟周期事件

原代码:

分析说明:

  1. time.sleep(1) 阻塞主线程
    •  get_mouse_position 函数中,time.sleep(1) 会阻塞整个 GUI 主线程,导致界面卡住,无法响应其他操作(如关闭窗口或移动窗口)
    • 解决方法:使用 tkinter  after() 方法代替 time.sleep(),这样可以避免阻塞主线程。
  2. 全局变量的使用
    • 你在 open_new_window 函数中使用了 global 关键字来定义 new_windowlabel1  label2。虽然这样可以访问这些变量,但过度使用 global 可能会导致代码难以维护。
    • 解决方法:可以将这些变量作为类的属性(如果使用面向对象编程),或者通过函数参数传递。
  3. pyautogui 的实时性
    • 你的代码在 get_mouse_position 中使用 for 循环来获取鼠标坐标,但这种方式不够灵活。如果用户关闭了新窗口,循环仍然会继续运行。
    • 解决方法:使用 after() 方法实现定时任务,并在新窗口关闭时停止任务。
  4. button2 的布局问题
    • button2 使用了 pack(pady=50),但它的位置可能会与其他组件重叠。
    • 解决方法:使用 place()  grid() 方法更精确地控制布局。

改进后的代码1

改进的代码2(面向对象编程):

改进后的代码3(更合理):

改进后的代码4(更合理):

十六、类的简单用法

十七、构建简易数据库

十八、文字识别程序

Tesseract OCR

  • 特点:开源的OCR引擎,支持多种语言,包括中文、英文等。可以集成到Python中,适合开发者使用。
  • 适用场景:本地部署、开发集成。
  • 优点:免费、开源、可定制性强。
  • 缺点:对复杂排版或低质量图片的识别效果可能较差

步骤:

下载并安装 Tesseract

打开 Tesseract 的安装目录(例如 C:\Program Files\Tesseract-OCR

检查 tessdata 文件夹中是否存在 chi_sim.traineddata 文件。如果不存在,可以手动下载:

  1. 下载 chi_sim.traineddata 文件。(在百度网盘的 软件或安装包/ Tesseract OCR语言包及安装包 中有)
  2. 将其放入 tessdata 文件夹中

设置环境变量

  • Windows
    1. 右键点击此电脑我的电脑,选择属性
    2. 点击高级系统设置” -> “环境变量
    3. 系统变量中,找到或新建 TESSDATA_PREFIX将其值设置为 tessdata 文件夹的路径(例如 C:\Program Files\Tesseract-OCR\tessdata)。
    4. 点击确定保存。
    5. 系统变量中,找到path变量,点击编辑,在弹出窗口中点击新建,把C:\Program Files\Tesseract-OCR添加进去。
    6. 注意:设置环境变量以后,需要重启电脑才能生效?

如果你不想修改环境变量,可以在代码中直接指定 tessdata 路径:

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

pytesseract.pytesseract.TESSDATA_PREFIX = r'C:\Program Files\Tesseract-OCR\tessdata'

调用案例:

十九、实际项目:文字识别工具开发

二十、实际项目:注册机开发

二十一、实际项目: 文字识别工具开发(完善版)

以上OCR代码打包成exe:

pyinstaller --onefile --noconsole --icon=sync.ico --add-binary "C:\Program Files\Tesseract-OCR\tesseract.exe;." --add-data "C:\Program Files\Tesseract-OCR\tessdata;tessdata" 02文字识别-注册版-需本地安装Tesseract.py

说明:-add-binary "C:\Program Files\Tesseract-OCR\tesseract.exe;."

--add-data "C:\Program Files\Tesseract-OCR\tessdata;tessdata"

以上两条命令是把Tesseract打包到exe中

--onefile             打包成一个exe文件

--noconsole      不需要控制台

--icon=sync.ico          设置程序图标

以上实战案例在易语言中也可以轻松实现,以下是相关技术文章链接:

《告别重复劳动!易语言实现档案数字化录入全自动助手》https://blog.csdn.net/u013741272/article/details/155843644?spm=1011.2415.3001.5331
告别手动修图!这个工具让批量处理扫描文档效率翻倍(去灰底、去黑边、文字加深、自动纠斜)_易语言实战项目https://blog.csdn.net/u013741272/article/details/155669286?spm=1011.2415.3001.5331

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐