吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 474|回复: 6
收起左侧

[经验求助] python转为exe程序

[复制链接]
freckle 发表于 2024-10-14 17:47
200吾爱币
有一个用Fitten Code Chat写的程序,在转exe时出错,试用了能搜到的插件命令都无法运行,
比如使用Pyinstaller转的提示:

Traceback (most recent call last):
File "tkinterdnd2\TkinterDnD.py", line 55, in _require
_tkinter.TclError: can't find package tkdnd

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "J:\PythonProjects\第一个\CUE\1.py", line 91, in <module>
root = TkinterDnD.Tk()
^^^^^^^^^^^^^^^
File "tkinterdnd2\TkinterDnD.py", line 287, in __init__
File "tkinterdnd2\TkinterDnD.py", line 57, in _require
RuntimeError: Unable to load tkdnd library.


源码
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinterdnd2 import TkinterDnD, DND_FILES


def read_file(file_path):
    # 尝试使用不同的编码读取文件
    for encoding in ['utf-8', 'ansi']:
        try:
            with open(file_path, 'r', encoding=encoding) as file:
                song_names = []
                for line in file:
                    # 移除行首的2位数字和".",再去除两端的空白字符
                    clean_name = line.strip()[3:]
                    song_names.append(clean_name)
                return song_names
        except (UnicodeDecodeError, LookupError):
            continue
    raise ValueError("无法读取文件,文件编码不受支持")



def replace_track_names(cue_content, song_names):
    for i, song_name in enumerate(song_names, start=1):
        old_track = f"音轨{i:02}"
        new_track = song_name
        cue_content = cue_content.replace(old_track, new_track)
    return cue_content


def process_files():
    song_file_path = song_file_entry.get()
    cue_file_path = cue_file_entry.get()

    if not song_file_path or not cue_file_path:
        messagebox.showerror("错误", "请选择文件")
        return

    try:
        song_names = read_file(song_file_path)

        # 尝试以不同编码读取CUE文件
        cue_content = None
        for encoding in ['utf-8', 'ansi']:
            try:
                with open(cue_file_path, 'r', encoding=encoding) as cue_file:
                    cue_content = cue_file.read()
                    break
            except (UnicodeDecodeError, LookupError):
                continue

        if cue_content is None:
            raise ValueError("无法读取CUE文件,文件编码不受支持")

        new_cue_content = replace_track_names(cue_content, song_names)

        with open(cue_file_path, 'w', encoding='utf-8') as cue_file:
            cue_file.write(new_cue_content)

        messagebox.showinfo("成功", "文件处理完成")
    except Exception as e:
        messagebox.showerror("错误", f"处理文件时出错: {e}")


def browse_song_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    song_file_entry.delete(0, tk.END)
    song_file_entry.insert(0, file_path)


def browse_cue_file():
    file_path = filedialog.askopenfilename(filetypes=[("CUE files", "*.cue")])
    cue_file_entry.delete(0, tk.END)
    cue_file_entry.insert(0, file_path)


def drop_song_file(event):
    file_path = event.data.strip('{}')  # 删除路径中的花括号{}
    song_file_entry.delete(0, tk.END)
    song_file_entry.insert(0, file_path)


def drop_cue_file(event):
    file_path = event.data.strip('{}')  # 删除路径中的花括号{}
    cue_file_entry.delete(0, tk.END)
    cue_file_entry.insert(0, file_path)



# 创建主窗口
root = TkinterDnD.Tk()
root.title("CUE文件音轨替换工具")

# 创建并放置标签和输入框
tk.Label(root, text="歌曲名列表文件:").grid(row=0, column=0, padx=10, pady=10)
song_file_entry = tk.Entry(root, width=50)
song_file_entry.grid(row=0, column=1, padx=10, pady=10)
song_file_entry.drop_target_register(DND_FILES)
song_file_entry.dnd_bind('<<Drop>>', drop_song_file)
tk.Button(root, text="浏览", command=browse_song_file).grid(row=0, column=2, padx=10, pady=10)

tk.Label(root, text="CUE文件:").grid(row=1, column=0, padx=10, pady=10)
cue_file_entry = tk.Entry(root, width=50)
cue_file_entry.grid(row=1, column=1, padx=10, pady=10)
cue_file_entry.drop_target_register(DND_FILES)
cue_file_entry.dnd_bind('<<Drop>>', drop_cue_file)
tk.Button(root, text="浏览", command=browse_cue_file).grid(row=1, column=2, padx=10, pady=10)

# 创建并放置处理按钮
tk.Button(root, text="处理文件", command=process_files).grid(row=2, column=1, padx=10, pady=20)

# 运行主循环
root.mainloop()




请转为exe

最佳答案

查看完整内容

通过网盘分享的文件:code1.exe 链接: https://pan.baidu.com/s/1dcuVWJBHGbkrVD1EV90sxQ?pwd=qkcg 提取码: qkcg --来自百度网盘超级会员v3的分享 通过ai优化了代码,生成了exe,试试看行不

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bywxbyjb 发表于 2024-10-14 17:47
通过网盘分享的文件:code1.exe
链接: https://pan.baidu.com/s/1dcuVWJBHGbkrVD1EV90sxQ?pwd=qkcg 提取码: qkcg
--来自百度网盘超级会员v3的分享
通过ai优化了代码,生成了exe,试试看行不
阿伟de大长腿 发表于 2024-10-14 18:05
https://blog.csdn.net/Zao5544/article/details/142153205,看下这个,貌似是包的问题,打包带上

pyinstaller -F Zao_Wordprocess_v1.0.py --paths C:\Users\User\PycharmProjects\pythonProject\.venv\Lib\site-packages --add-data "C:\Users\User\PycharmProjects\pythonProject\.venv\Lib\site-packages\tkinterdnd2;tkinterdnd2" --add-data "C:\Users\User\PycharmProjects\pythonProject\.venv\Lib\site-packages\tkinterdnd2\tkdnd;tkinterdnd2/tkdnd" --hidden-import=tkinterdnd2 --hidden-import=tkdnd --clean
Shiliu2713 发表于 2024-10-14 18:22
https://x.ws59.cn/f/fbmkf9tbbl9 复制链接到浏览器打开
测试下看看
WIN11测试 双击打开是没问题的  
 楼主| freckle 发表于 2024-10-14 18:33
Shiliu2713 发表于 2024-10-14 18:22
https://x.ws59.cn/f/fbmkf9tbbl9 复制链接到浏览器打开
测试下看看
WIN11测试 双击打开是没问题的

能打开了,为啥会有个DOS窗口,关闭“黑窗口”py.exe也会关闭
flyer_2001 发表于 2024-10-14 19:06
freckle 发表于 2024-10-14 18:33
能打开了,为啥会有个DOS窗口,关闭“黑窗口”py.exe也会关闭

使用pyinstall 打包时加上参数-w就可以消除了
Nanoha123 发表于 2024-10-15 10:05
多谢楼主提醒更新
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 01:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表