首页 > 解决方案 > 在使用 pyinstaller 或其他任何东西将 py 编译为 exe 后,是否可以仅在特定时间激活控制台?

问题描述

我正在用 python 构建一个程序,它将使用 robocopy 复制大文件。由于 gui 在复制完成时冻结,我只有两个选择: 1. 学习如何进行多线程并设计 gui 以显示进度而不是冻结。2. 使用 pyinstaller 编译后保持控制台打开,以在 gui 冻结时显示 robocopy 进度。

我愿意做多线程,但我是初学者,很难理解如何为 robocopy 创建另一个子进程,并从那里将进度提取到 gui 的标签中。我想到的选项是仅在复制完成时才激活 cmd 控制台。可能吗?场景将是这样的:

  1. 打开程序(控制台将被隐藏)
  2. 按下复制按钮(控制台弹出并在 gui 冻结时显示复制进度)
  3. 复制完成后再次隐藏控制台

正如我上面所说。我并不完全排除添加多线程,但为此我需要一些帮助。

谢谢!

标签: pythoncmdpyinstaller

解决方案


请尝试此代码,应该可以正常工作,如果有问题请告诉我:

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()

推荐阅读