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 = tk.Frame(dnd_frame, bg=theme["card_bg"])
|
||||||
btn_row.pack(fill=tk.X)
|
btn_row.pack(fill=tk.X)
|
||||||
|
|
||||||
|
is_frozen = getattr(sys, 'frozen', False)
|
||||||
|
|
||||||
def copy_install():
|
def copy_install():
|
||||||
try:
|
try:
|
||||||
mid_container.winfo_toplevel().clipboard_clear()
|
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:
|
except Exception as e:
|
||||||
messagebox.showwarning("复制失败", str(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)
|
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):
|
def _click_select(evt=None):
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ hidden_imports = [
|
|||||||
'xlutils',
|
'xlutils',
|
||||||
'requests',
|
'requests',
|
||||||
'dotenv',
|
'dotenv',
|
||||||
|
'tkinterdnd2',
|
||||||
'configparser',
|
'configparser',
|
||||||
'threading',
|
'threading',
|
||||||
'datetime',
|
'datetime',
|
||||||
|
|||||||
Reference in New Issue
Block a user