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

Python GUI程序经auto-py-to-exe转exe后按钮点击无响应求助

问题:Python GUI程序转exe后按钮无响应

我编写了一款带GUI的Python程序,界面包含按钮和若干输入框。点击按钮时会创建包含多个子文件夹的新目录,并将输入框中的信息保存至该目录下的CSV文件中。在PyCharm中运行该程序一切正常,但使用auto-py-to-exe将其转换为exe文件后,程序能够正常启动,但点击按钮时无任何反应。

核心代码

def create_folder(EingabeName_text):
    folder_name = EingabeName_text
    folder_path = os.path.join(os.path.dirname(__file__), "BHW", folder_name)
    os.mkdir(folder_path)

    briefe_path = os.path.join(folder_path, "_Briefe")
    rechnung_path = os.path.join(folder_path, "_Rechnung")
    ordnerKunde_path = os.path.join(folder_path, "ordner1")
    ordner2_path = os.path.join(folder_path, "ordner2")
    ordner3_path = os.path.join(folder_path, "ordner3")
    ordner4_path = os.path.join(folder_path, "ordner4")

    os.mkdir(briefe_path)
    os.mkdir(rechnung_path)
    os.mkdir(ordnerKunde_path)
    os.mkdir(ordner2_path)
    os.mkdir(ordner3_path)
    os.mkdir(ordner4_path)

    csv_folder_path = os.path.join(folder_path, f"{EingabeName_text}.csv")

    with open(csv_folder_path, 'w', newline='') as csv_file_briefe:
        fieldnames = ['Kundendaten']
        writer = csv.DictWriter(csv_file_briefe, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerow({'Kundendaten': EingabeName.get()})
        writer.writerow({'Kundendaten': EingabeStrasse.get()})
        writer.writerow({'Kundendaten': EingabePlzOrt.get()})
        writer.writerow({'Kundendaten': 'Geburtsdatum:'})
        writer.writerow({'Kundendaten': EingabeGeurtstag.get()})
        writer.writerow({'Kundendaten': 'Handynummer:'})
        writer.writerow({'Kundendaten': EingabeHandy.get()})
        writer.writerow({'Kundendaten': 'Rechnungsnummer:'})
        writer.writerow({'Kundendaten': EingabeRnummer.get()})
        writer.writerow({'Kundendaten': 'Informationen:'})
        writer.writerow({'Kundendaten': textbox.get("1.0", "end")})

依赖库

import os
import time
from tkinter.filedialog import askopenfilename
import customtkinter
import customtkinter as ctk
import csv
from PIL import Image

解决方案

1. 修复路径问题

exe运行时,os.path.dirname(__file__)指向临时解压目录,且可能无写入权限,替换为稳定路径:

import sys

def create_folder(EingabeName_text):
    folder_name = EingabeName_text
    # 方式1:获取exe所在目录
    if getattr(sys, 'frozen', False):
        base_path = os.path.dirname(sys.executable)
    else:
        base_path = os.path.dirname(__file__)
    folder_path = os.path.join(base_path, "BHW", folder_name)
    
    # 先创建父目录(避免BHW目录不存在报错)
    os.makedirs(folder_path, exist_ok=True)
    
    # 简化子目录创建
    sub_folders = ["_Briefe", "_Rechnung", "ordner1", "ordner2", "ordner3", "ordner4"]
    for sub in sub_folders:
        os.makedirs(os.path.join(folder_path, sub), exist_ok=True)
    
    # 剩余代码...

也可以改用用户文档目录(更安全,避免权限问题):

folder_path = os.path.join(os.path.expanduser("~"), "Documents", "BHW", folder_name)

2. 捕获异常并暴露错误

按钮无响应通常是代码抛出异常但未提示,添加异常捕获:

def create_folder(EingabeName_text):
    try:
        # 原代码内容...
    except Exception as e:
        # 弹窗显示错误
        error_win = ctk.CTkToplevel()
        error_win.title("错误提示")
        ctk.CTkLabel(error_win, text=f"操作失败:{str(e)}").pack(padx=20, pady=20)
        # 同时写入日志文件
        with open("error_log.txt", "w", encoding="utf-8") as f:
            f.write(str(e))

3. 调整打包配置

  • 先取消auto-py-to-exe的--windowed选项,用控制台模式运行exe,直接查看控制台输出的错误信息。
  • 检查customtkinter和PIL的资源是否被正确打包,若遗漏可手动添加--add-data参数,比如:
    --add-data "path/to/customtkinter/themes;customtkinter/themes"
    --add-data "path/to/PIL/images;PIL/images"
    

4. 修复全局变量作用域问题

代码中直接使用全局控件对象(如EingabeName.get()),打包后可能出现作用域问题,改为将控件作为参数传入:

def create_folder(name_entry, strasse_entry, plz_entry, geburtstag_entry, handy_entry, rnummer_entry, text_box):
    # 使用传入的控件获取值
    with open(csv_folder_path, 'w', newline='') as csv_file_briefe:
        # ...其他代码...
        writer.writerow({'Kundendaten': name_entry.get()})
        writer.writerow({'Kundendaten': strasse_entry.get()})
        # 其余输入框同理

内容的提问来源于stack exchange,提问作者David Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:42:44