And*_*rew 5 python windows tkinter relative-path portable-executable
我使用 Tkinter 在 python 中编写了一个简单的 GUI 程序。我们将此程序称为“gui.py”。我的用户使用Portable Python从 USB 密钥在 Windows 计算机上运行“gui.py” ;在主机上安装任何东西都是不可取的。
我希望我的用户通过双击 USB 密钥根目录下的图标来运行“gui.py”。我的用户不关心 python 是什么,如果不需要,他们也不想使用命令提示符。我不希望他们关心 USB 密钥分配的驱动器号。我希望它可以在 XP、Vista 和 7 上运行。
我的第一个丑陋的解决方案是在 USB 密钥的根目录中创建一个快捷方式,并将快捷方式的“目标”属性设置为“(root)\App\pythonw.exe (root)\App\gui.py” ”,但我不知道如何在 Windows 快捷方式中执行相对路径,并且使用像“E:”这样的绝对路径似乎很脆弱。
我的下一个解决方案是在 USB 闪存盘的根目录中创建一个 .bat 脚本,如下所示:
@echo off
set basepath=%~dp0
"%basepath%App\pythonw.exe" "%basepath%\App\gui.py"
Run Code Online (Sandbox Code Playgroud)
这似乎并不关心 USB 密钥分配的驱动器号,但它确实在我的程序运行时使 DOS 窗口保持打开状态。实用,但丑陋。
接下来我尝试了这样的 .bat 脚本:
@echo off
set basepath=%~dp0
start "" "%basepath%App\pythonw.exe" "%basepath%\App\gui.py"
Run Code Online (Sandbox Code Playgroud)
(有关有趣引用的解释,请参见此处)
现在,在 GUI 打开之前,DOS 窗口会在屏幕上短暂闪烁。少一点丑!还是丑啊
真正的男人如何处理这个问题呢?从 USB 记忆棒在 Windows 机器上启动 python Tkinter GUI 的最不丑陋的方法是什么?
编辑:下面的所有答案都非常好(py2exe、pyinstaller、小.exe、.wsf 脚本。).wsf 解决方案是最简单的,所以我现在使用它。如果我想要更漂亮的图标和标准的 .exe 扩展名,我可能最终会切换到其他三种解决方案之一。感谢大家!
可以使用此 Windows 脚本主机脚本(文件扩展名 .wsf)代替批处理文件:
<job>
<script language="VBScript">
set WshShell = WScript.CreateObject("WScript.Shell")
CMDFile = "App\\pythonw.exe App\\gui.py"
WshShell.Run CMDFile, 1
</script>
</job>
Run Code Online (Sandbox Code Playgroud)
更新:或者编译此 C 程序并链接图标资源:
#include <windows.h>
#include <process.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
return _spawnl(_P_NOWAIT, "App/pythonw.exe", " App/gui.py", lpCmdLine, NULL);
}
Run Code Online (Sandbox Code Playgroud)
更新 2:要构建带有图标的 App.exe,请将 C 代码保存到 app.c,创建 Windows 图标文件 app.ico,并将以下行保存到 app.rc:
appicon ICON "app.ico"
Run Code Online (Sandbox Code Playgroud)
使用 Visual Studio 2008 Express,运行以下命令:
"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
rc.exe app.rc
cl.exe app.c /FeApp.exe /link app.res
Run Code Online (Sandbox Code Playgroud)
或者使用“Visual Studio 2010 Express”或“适用于 Windows 7 和 .NET Framework 3.5 Service Pack 1 的 Microsoft Windows SDK v7.0”并相应地调整命令。
请注意,该图标仅用于 App.exe 启动程序,而不用于您的 Python 程序。
| 归档时间: |
|
| 查看次数: |
8089 次 |
| 最近记录: |