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

news2024/11/17 6:44: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 wx

app = 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.coloradmin.cn/o/604734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows server 查看登录日志

windows server 查看登录日志 1、 先要开启登录审核&#xff0c;在查看登录日志 点击 “服务器管理器” – > “工具” – > “本地安全策略” 点击 “本地策略” – > “点击审核策略” 审核 成功 和 失败的记录&#xff08;可以全选也可以选择需要审计的操作&am…

Linux pthread_create源码分析

前言 本文介绍pthread_create函数的使用和源码分析。 /include/pthread.h bionic/libc/bionic/pthread_create.cpp bionic/libc/bionic/pthread_attr.cpp pthread_create使用 Android中的绝大部分线程&#xff0c;最后都是通过pthread_create创建的。 int pthread_create(p…

【LeetCode热题100】打卡第11天:有效括号合并两个有序链表

文章目录 【LeetCode热题100】打开第11天⛅前言&#x1f512;有效括号&#x1f511;题解&#x1f512;合并两个有序链表&#x1f511;题解&#x1f4a1;思路一&#xff1a;合并到第三方链表上&#x1f510;【非递归实现】&#x1f510;【递归实现】 &#x1f4a1;思路二 &#…

2023年上半年数据库系统工程师下午真题及答案解析

试题一(15分) 某新能源汽车公司为了提升效率&#xff0c;需开发一个汽车零件采购系统。请完成系统的数据库设计。 概念结构设计 需求描述 (1)记录供应商信息&#xff0c;包括供应商的名称、地址和一个电话。 (2)记录零件信息&#xff0c;包括零件的编码、名称和价格。 (3)…

线程的四个属性

如上图所示&#xff0c;线程有四个属性&#xff1a; 线程ID线程名称守护线程线程优先级 1. 线程ID 每个线程都有id&#xff0c;这个id不能修改 线程id会不停的自增&#xff0c;从1开始 main函数就是第一个线程&#xff0c;id1 id 是操作系统用来识别各个线程的编号&#…

DHVT:在小数据集上降低VIT与卷积神经网络之间差距,解决从零开始训练的问题

VIT在归纳偏置方面存在空间相关性和信道表示的多样性两大缺陷。所以论文提出了动态混合视觉变压器(DHVT)来增强这两种感应偏差。 在空间方面&#xff0c;采用混合结构&#xff0c;将卷积集成到补丁嵌入和多层感知器模块中&#xff0c;迫使模型捕获令牌特征及其相邻特征。 在信…

tcp shrinking window 之进退

一个有趣的问题&#xff1a;Unbounded memory usage by TCP for receive buffers, and how we fixed it 引出一个 kernel patch&#xff1a;[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits 但这 patch 把一个问题变成了两个问题&#…

apple pencil一代的平替有哪些品牌?平价电容笔推荐

要知道&#xff0c;真正的苹果原装电容笔&#xff0c;价格可不低&#xff0c;仅仅一支就是近千块。实际上&#xff0c;平替电容笔对没有太多预算的用户是个不错的选择。一款苹果的电容笔的售价&#xff0c;相当于平替电容笔的四倍&#xff0c;不过平替电容笔的书写体验&#xf…

pnpm对npm及yarn降维打击详解

目录 正文npm2yarnpnpm总结 正文 大家最近是不是经常听到 pnpm&#xff0c;我也一样。今天研究了一下它的机制&#xff0c;确实厉害&#xff0c;对 yarn 和 npm 可以说是降维打击。 那具体好在哪里呢&#xff1f; 我们一起来看一下。 我们按照包管理工具的发展历史&#xf…

3.5 凸多边形最优三角部分

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.什么是多边形的三角剖分&#xff1f; 多边形三角剖分是指将多边形分割成互不相交的三角形的弦的集合T。 我的理解&#xff1a; 多边形三角剖分是将给…

uniapp本地存储详解

uniapp本地存储详解 前言 在开发uniapp应用时&#xff0c;我们常常需要使用本地存储来保存一些数据&#xff0c;比如用户登录信息、设置项等&#xff0c;使得应用能够在设备上保存和读取数据&#xff0c;以便提供更好的用户体验和离线功能支持&#xff0c;本文将简单介绍unia…

python编程——编译器与解释器

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 前言 一、编译器与解释器的介绍 二、编译器与解释器…

JDK1.8下载安装(优雅)

bug虐我千百遍&#xff0c;我待bug如初恋。 这里使用的环境是win11 64位系统&#xff0c;应该适配win8-win11 一、下载 这里提供两种下载方式&#xff0c;官网下载和第三方下载&#xff0c;区别就是下载速度不同 1. 官网下载 &#xff08;1&#xff09;官网下载&#xff1a;…

智慧物流货运系统源码 货运平台的功能介绍

网络货运平台源码 网络货运平台的功能 网络货运是指利用互联网平台&#xff0c;通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合&#xff0c;通过网络平台进行交易、物流配送和结算等一系列商业流程&#xff0c;从而…

用户画像如何创新破局数据驱动增长 | 数据增长

用户画像即用户信息标签化&#xff0c;就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后&#xff0c;完美地抽象出一个用户的商业全貌&#xff0c;是企业应用大数据技术的基本方式。例如&#xff1a;通过收集用户的人口属性、行为属性、消费习惯…

面向初学者的数据科学|要学习的内容概述

面向初学者的数据科学|要学习的内容概述 数据科学家是21世纪最性感的工作。每个人都想变得性感。该领域开始变得竞争激烈&#xff0c;提高了就业标准。 因此&#xff0c;仅仅知道如何使用不同的工具是不够的&#xff0c;求职者需要能够抓住基本的概念和技术&#xff0c;然后应用…

VMware Cloud Foundation 5.0 发布 - 领先的多云平台

VMware Cloud Foundation 5.0 发布 - 领先的多云平台 高效管理虚拟机 (VM) 和容器工作负载。为本地部署的全栈超融合基础架构 (HCI) 提供云的优势。 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-cloud-foundation-5/&#xff0c;查看最新版。原创作品&#xff…

DEMO:F4帮助 收藏夹功能

货铺QQ群号&#xff1a;834508274微信群不能扫码进了&#xff0c;可以加我微信SAPliumeng拉进群&#xff0c;申请时请提供您哪个模块顾问&#xff0c;否则是一律不通过的。进群统一修改群名片&#xff0c;例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接&#xff0c;小程…

没有硬件资源?免费使用Colab搭建你自己的Stable Diffiusion在线模型!保姆级教程...

部署 Stable Diffusion 需要一定的硬件资源&#xff0c;具体取决于要处理的图像大小和处理速度等因素。一般来说&#xff0c;至少需要一台具有较高计算能力的服务器&#xff0c;而对 GPU 的高要求就限制了我们学习和使用SD来生成我们想要的图像。 GPU是深度学习开发的重要硬件条…

C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…