You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击按钮打开其他文件:多Python脚本打包为单EXE运行需求

实现按钮打开子窗口并打包为单个独立EXE的解决方案

一、修正代码并适配打包需求

先把现有代码里的错误和适配打包的部分调整好:

修改后的Main.py

import sys
import os
import subprocess
from tkinter import Tk, Button

def open_next_script():
    if getattr(sys, 'frozen', False):
        # 打包后运行时,获取临时解压目录
        base_path = sys._MEIPASS
    else:
        # 作为脚本运行时,获取当前文件所在目录
        base_path = os.path.dirname(os.path.abspath(__file__))

    script_path = os.path.join(base_path, 'Next.py')
    
    try:
        startupinfo = None
        # Windows下隐藏控制台窗口
        if os.name == 'nt':
            startupinfo = subprocess.STARTUPINFO()
            startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
        subprocess.Popen([sys.executable, script_path], startupinfo=startupinfo)
    except FileNotFoundError as e:
        print(f"找不到文件: {e}")
    except Exception as e:
        print(f"发生错误: {e}")
    
    root.withdraw()

root = Tk()
button = Button(root, text="打开Next窗口", command=open_next_script)
button.pack()
root.mainloop()

修改后的Next.py

from tkinter import Tk, Label

print("Hello")

root = Tk()
root.title("Next窗口")
Label(root, text="这是从Main打开的子窗口").pack()
root.mainloop()

二、用PyInstaller打包成单个独立EXE

  1. 先安装PyInstaller:
pip install pyinstaller
  1. 执行打包命令(Windows系统):
pyinstaller --onefile --windowed --add-data "Next.py;." Main.py

参数说明:

  • --onefile:强制打包成单个EXE文件
  • --windowed:运行时不弹出控制台窗口(如果需要查看print输出,去掉这个参数即可)
  • --add-data "Next.py;.":把Next.py作为资源打包进去,程序运行时会自动解压到和EXE同层级的目录(Linux/macOS下把分号改成冒号)
  1. 打包完成后,去项目目录下的dist文件夹找生成的EXE文件,直接复制到其他Windows电脑就能独立运行。

三、更简洁的替代方案

如果不需要单独启动Next.py进程,完全可以把Next的窗口逻辑直接写到Main.py里,省掉subprocess调用的步骤,打包也更简单:

修改Main.py如下:

import sys
import os
from tkinter import Tk, Button, Label

def open_next_window():
    root.withdraw()
    # 直接创建新窗口
    next_root = Tk()
    next_root.title("Next窗口")
    Label(next_root, text="这是子窗口").pack()
    next_root.mainloop()

root = Tk()
button = Button(root, text="打开Next窗口", command=open_next_window)
button.pack()
root.mainloop()

打包时直接执行:

pyinstaller --onefile --windowed Main.py

这种方式不需要处理额外的文件路径,打包出来的EXE更简洁。

内容的提问来源于stack exchange,提问作者srijan chakraborty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:14:54