【发布时间】:2021-10-04 21:44:55
【问题描述】:
我的代码需要运行一个程序,该程序将下载图像并无限期地运行,直到被告知停止。问题是让 Tkinter 窗口保持活动状态,所以我运行代码,它开始工作但 Tkinter 窗口被冻结。
我尝试过线程化,但很难理解。注释掉的部分是我之前尝试过但没有工作的线程。 root.update_idletasks() 应该刷新小部件,但这不起作用。
def mainmenuControls(menuState):
if menuState == "start" and selectionsExist():
mainMenu("started")
subprocess.run("run.bat", shell=True)
root.update_idletasks()
#thread = threading.Thread(target=subprocess.run("console.pyw", shell=True))
#thread.start()
mainMenu()
【问题讨论】:
-
您在主线程中尝试调用
subprocess.run()立即的线程,从而导致与非线程版本相同的问题。您需要将 function 传递给Thread()(在这种情况下为subprocess.run),并通过args=和kwargs=指定其参数 - 这允许它在线程中实际调用. -
改用
subprocess.Popen()。
标签: python python-3.x tkinter