打造一个你自己图标exe的Python脚本启动器

news/2024/11/30 15:27:48/

目录

  • 1. 背景需求
  • 2. 需求软件
  • 3. 准备图标
  • 4. 编译命令
    • 4.1 使用Windows API
    • 4.2 使用-mwindows参数编译
    • 4.3 使用pythonw.exe解释器
  • 5. 测试运行
    • 5.1 参考代码
    • 5.2 使用效果

1. 背景需求

有时候为了确保多平台的兼容性,需要开发绿色版的应用程序,也就是在嵌入式版Python上进行二次开发。并且工程目录中就包含源代码,方便随时开发和调试。

这个时候使用的启动器,实际上是文件夹内的一个Python解释器,那么可以很简单地使用一个 BAT 文件调用打开。

但是用户普遍对于 BAT 的接受程度不是很高,总是需要告诉用户运行哪个文件才能启动程序。

因为想要为 BAT 文件设置一个图标,只能创建一个快捷方式,然后修改快捷方式的图标。但是快捷方式嘛,拷贝到别的电脑里就没有用了。

这个时候如果设计一个带有图标的exe程序,那么岂不是一目了然,还能提升软件定位的档次。

这个软件的功能也非常简单,就是实现 BAT 文件的功能,使用文件夹内的Python解释器,打开文件夹内的一个Python脚本就可以了。然后再加上自己精致的图标

2. 需求软件

  • python-portable
  • gcc
  • 格式工厂

3. 准备图标

应用程序窗口左上角的图标像素是 16×16 ,任务栏的图标是 24×24 ,文件夹浏览器里的图标最大可以支持 256×256 。

如果简单一点,可以使用 16 和 24 的最小公倍数,也就是按照 48×48 来设计图标。

将图片保存为支持透明颜色的 PNG 图像,然后用格式工厂转换成 ICO 格式,之后配合 windres 命令,就可以编译出包含有图标的exe可执行程序了。

4. 编译命令

如果你设计的是窗口程序,希望在运行程序时,不会有黑色的控制台窗口启动,需要进行下面三个设置,缺一不可。缺少一个都会导致黑窗仍然存在。

4.1 使用Windows API

使用 system(cmd) 可以最简单地模仿批处理程序运行一个命令,但是这个命令是通过 CMD 的管道执行的,所以必定会启动 CMD 的黑窗界面,效果是黑色窗口一闪而过。

所以为了避免这个问题,就要调用 Windows API 的 ShellExecuteA 函数了。

函数用法说明就不介绍了,网上可以自己查。

4.2 使用-mwindows参数编译

-mwindows 实际上是 -machinewindows 的合并,意思是生成包含窗口的应用程序,而非控制台程序。

我曾经以为这里的 windows 指的是“微软视窗系统”的“Windows”,但是实际上并不是。

就像常见的编译参数 -march ,并不是 march 这个单词三月的意思,而是 marchitecture (构架)的合并。。

4.3 使用pythonw.exe解释器

pythonw 中的 w 又是 windows 的意思,是Python解释器中不启动控制台界面的版本。

所以想要启用Python脚本但是不会打开控制台界面,需要使用 pythonw 版本的解释器。

5. 测试运行

5.1 参考代码

需要准备5个文件:

  • 测试被运行的Python文件 main.py
import wxapp = wx.App()
wx.MessageBox('Hello world!')
app.MainLoop()
  • 主程序 main.c
#include <windows.h>int main()
{ShellExecuteA(NULL, "open", "bin\\pythonw.exe", "main.py", "src", SW_SHOW);return 0;
}
  • 图标 icon.ico 和资源文件 icon.rc
101 ICON "icon.ico"
  • 编译批处理文件 dist.bat
@echo off
windres icon.rc -o icon.o
gcc main.c icon.o -o main.exe -mwindows -s
upx main.exe
pause

双击运行 dist.bat 即可。

5.2 使用效果

使用效果是使用当前目录 bin 文件夹下的 pythonw.exe 文件,执行 src 文件夹中的 main.py 脚本。

运行效果:

在这里插入图片描述


http://www.ppmy.cn/news/183422.html

相关文章

Unity Addressables学习笔记(3)---加载远程场景Scenes

前言 Unity Addressables学习笔记—汇总 正文 1.创建一个新场景 我是创建在Resources/Scenes目录下&#xff0c;如图&#xff1a; 2.为场景创建一个Addressables的Group Game1Group就是我新创建的一个Group用来存放场景1的所有资源&#xff0c;分组的配置跟Remote一样&a…

RocketMQ消息消费

RocketMQ消息消费示例代码&#xff1a; public static void main(String[] args) throws InterruptedException, MQClientException {DefaultMQPushConsumer consumer new DefaultMQPushConsumer("please_rename_unique_group_name_4");consumer.setNamesrvAddr(&qu…

Java官方笔记5数字和字符串

Numbers Number的子类&#xff1a; 另外还有BigDecimal和BigInteger&#xff0c;用于高精度计算&#xff0c;AtomicInteger和AtomicLong用于多线程应用。 我们有时候需要用包装类而非基本数据类型&#xff0c;理由如下&#xff1a; 方法入参类型为Object&#xff0c;只能传入对…

大数据:数据表操作,分区表,分桶表,修改表,array,map, struct

大数据&#xff1a;数据表操作&#xff0c;分区表 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&a…

有哪款戴尔笔记本适合学计算机专业,学生用笔记本哪款好? 2018适合大学生用的笔记本...

谁的青春不迷茫&#xff0c;为学业、为爱情、为友情。又是一年毕业季&#xff0c;又是一年开学季&#xff0c;相信拿到录取通知书的学生们开始为选择什么电脑而迷茫了。电子产品价格昂贵&#xff0c;如果需要买电脑也确实需要下些功夫。运行速度、质感、散热、重量、售价、所学…

学计算机的需要配哪种笔记本,微软哪一款笔记本电脑办公用性价比高?

微软在发布第一代Surface电脑时应该想不到它会变成今天的样子。2012年在纽约时代广场的快闪店我买到了和Windows 8一起发布的第一代Surface&#xff0c;那是搭载ARM芯片的平板电脑&#xff0c;虽然工业设计惊艳&#xff0c;但实际市场反响并不算好。直到2015年Surface Pro 4的上…

打游戏最快的计算机,打游戏最好的笔记本电脑是哪一款-散热迅速运行流畅笔记本电脑大全...

数码市场上游戏笔记本电脑品牌数不胜数&#xff0c;大家在玩打游戏的笔记本电脑时也会货币三家呢&#xff1f;针对市面上层出不穷的游戏笔记本电脑纠结哪款更好用呢&#xff1f;散热迅速运行流畅是非常必要的考虑因素&#xff0c;小编为大家带来打游戏最好的笔记本电脑推荐&…

适合php编程的笔记本电脑,做web前端,推荐一款笔记本电脑。

4000-5000的就行。 这个问题已被关闭&#xff0c;原因&#xff1a;非技术提问的讨论型问题 回复内容&#xff1a; 4000-5000的就行。 华硕笔记本足够优秀的了 你买的华硕什么型号的 2.7GHz 处理器 128 GB 存储容量 2.7GHz 双核 Intel Core i5 处理器 Turbo Boost 高达 3.1GHz 8…