在使用pyinstaller或其他任何东西编译py到exe后,是否可以在某些时候激活控制台?

问题描述 投票:0回答:1

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

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

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

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

谢谢!

python cmd pyinstaller
1个回答
0
投票

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

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()
© www.soinside.com 2019 - 2024. All rights reserved.