fix: EXE版禁用一键安装拖拽,打包时集成tkinterdnd2
- EXE版(sys.frozen)不显示安装按钮,提示用源码版安装后重新打包 - tkinterdnd2 加入 hidden_imports,打包时自动带上 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+26
-18
@@ -304,6 +304,8 @@ def _setup_drag_area(mid_container, theme, dnd_supported, log_text, status_bar):
|
||||
btn_row = tk.Frame(dnd_frame, bg=theme["card_bg"])
|
||||
btn_row.pack(fill=tk.X)
|
||||
|
||||
is_frozen = getattr(sys, 'frozen', False)
|
||||
|
||||
def copy_install():
|
||||
try:
|
||||
mid_container.winfo_toplevel().clipboard_clear()
|
||||
@@ -312,26 +314,32 @@ def _setup_drag_area(mid_container, theme, dnd_supported, log_text, status_bar):
|
||||
except Exception as e:
|
||||
messagebox.showwarning("复制失败", str(e))
|
||||
|
||||
if is_frozen:
|
||||
tk.Label(
|
||||
btn_row, text="EXE版不支持运行时安装,请用源码版安装后重新打包",
|
||||
bg=theme["card_bg"], fg="#999999", font=("Microsoft YaHei UI", 8)
|
||||
).pack(side=tk.RIGHT, padx=4)
|
||||
else:
|
||||
def install_and_restart():
|
||||
try:
|
||||
add_to_log(log_text, "开始安装拖拽支持库 tkinterdnd2...\n", "info")
|
||||
cmd = [sys.executable, "-m", "pip", "install", "tkinterdnd2"]
|
||||
result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||
add_to_log(log_text, result.stdout + "\n", "info")
|
||||
add_to_log(log_text, "安装成功,准备重启程序以启用拖拽...\n", "success")
|
||||
if messagebox.askyesno("安装完成", "已安装拖拽支持,是否立即重启应用?"):
|
||||
os.execl(sys.executable, sys.executable, *sys.argv)
|
||||
except subprocess.CalledProcessError as e:
|
||||
add_to_log(log_text, f"安装失败: {e.stderr}\n", "error")
|
||||
messagebox.showerror("安装失败", f"安装输出:\n{e.stderr}")
|
||||
except Exception as e:
|
||||
add_to_log(log_text, f"安装失败: {str(e)}\n", "error")
|
||||
messagebox.showerror("安装失败", str(e))
|
||||
|
||||
create_modern_button(btn_row, "一键安装拖拽", install_and_restart, "primary", px_width=132, px_height=28).pack(side=tk.RIGHT, padx=(3, 0))
|
||||
|
||||
create_modern_button(btn_row, "复制安装命令", copy_install, "primary", px_width=132, px_height=28).pack(side=tk.RIGHT)
|
||||
|
||||
def install_and_restart():
|
||||
try:
|
||||
add_to_log(log_text, "开始安装拖拽支持库 tkinterdnd2...\n", "info")
|
||||
cmd = [sys.executable, "-m", "pip", "install", "tkinterdnd2"]
|
||||
result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
|
||||
add_to_log(log_text, result.stdout + "\n", "info")
|
||||
add_to_log(log_text, "安装成功,准备重启程序以启用拖拽...\n", "success")
|
||||
if messagebox.askyesno("安装完成", "已安装拖拽支持,是否立即重启应用?"):
|
||||
os.execl(sys.executable, sys.executable, *sys.argv)
|
||||
except subprocess.CalledProcessError as e:
|
||||
add_to_log(log_text, f"安装失败: {e.stderr}\n", "error")
|
||||
messagebox.showerror("安装失败", f"安装输出:\n{e.stderr}")
|
||||
except Exception as e:
|
||||
add_to_log(log_text, f"安装失败: {str(e)}\n", "error")
|
||||
messagebox.showerror("安装失败", str(e))
|
||||
|
||||
create_modern_button(btn_row, "一键安装拖拽", install_and_restart, "primary", px_width=132, px_height=28).pack(side=tk.RIGHT, padx=(3, 0))
|
||||
|
||||
# 点击拖拽框选择文件
|
||||
def _click_select(evt=None):
|
||||
try:
|
||||
|
||||
@@ -58,6 +58,7 @@ hidden_imports = [
|
||||
'xlutils',
|
||||
'requests',
|
||||
'dotenv',
|
||||
'tkinterdnd2',
|
||||
'configparser',
|
||||
'threading',
|
||||
'datetime',
|
||||
|
||||
Reference in New Issue
Block a user