python - 在使用 pyinstaller 或其他任何东西将 py 编译为 exe 后,是否可以仅在特定时间激活控制台?
问题描述
我正在用 python 构建一个程序,它将使用 robocopy 复制大文件。由于 gui 在复制完成时冻结,我只有两个选择: 1. 学习如何进行多线程并设计 gui 以显示进度而不是冻结。2. 使用 pyinstaller 编译后保持控制台打开,以在 gui 冻结时显示 robocopy 进度。
我愿意做多线程,但我是初学者,很难理解如何为 robocopy 创建另一个子进程,并从那里将进度提取到 gui 的标签中。我想到的选项是仅在复制完成时才激活 cmd 控制台。可能吗?场景将是这样的:
- 打开程序(控制台将被隐藏)
- 按下复制按钮(控制台弹出并在 gui 冻结时显示复制进度)
- 复制完成后再次隐藏控制台
正如我上面所说。我并不完全排除添加多线程,但为此我需要一些帮助。
谢谢!
解决方案
请尝试此代码,应该可以正常工作,如果有问题请告诉我:
import tkinter as tk
import os
import subprocess
import threading
main = tk.Tk()
main.title('Title')
frame_main = tk.Frame(main)
frame_main.grid(columnspan=1)
src = 'D:/path/to/the/folder'
dest = 'D:/path/to/the/folder2'
selection_platf = len(os.name)
def copy_build_button():
if selection_platf < 11:
subprocess.call(["robocopy", src, dest, r"/XF", 'BT V_SyncPackage.zip', "/S"])
else: #for linux
subprocess.call(["robocopy", src, dest, "/S"])
def copy_thread():
thread_1 = threading.Thread(target=copy_build_button)
thread_1.start()
button_main1 = tk.Button(frame_main, text="copy_build_button", width=50, height=5, fg="green", command=copy_thread)
button_main1.grid(column=0, sticky='N'+'S'+'E'+'W')
main.mainloop()
推荐阅读
- javascript - 高背景图像旋转但不是宽的
- r - 用 NA/NULL 替换不需要的值
- javascript - 如何从选定对象的数组中获取数据属性值
- ruby-on-rails - RoR:form_for 正在我页面底部打印活动记录?
- node.js - 使用 $unset 操作删除字段只是将其转换为空值
- authentication - 如何在没有资源服务器的情况下提取 JWT 到期日期?
- sql - 如何在 SQL 中将值获取到 XML 标记中
- python - Tensorflow 2.0,用 1s 替换张量中的 0 值
- javascript - 反应大日历导航到特定日期
- sql - 访问查询神秘地省略记录