在打开另一个文件(.pyw)时,如何防止我的tkinter主窗口冻结?

2024-05-02 03:05:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码需要运行一个程序,该程序将下载图像,并将无限期运行,直到被告知停止。问题是让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()

Tags: run代码图像程序truetkinterupdateroot
1条回答
网友
1楼 · 发布于 2024-05-02 03:05:59
def anewprocess():    
     subprocess.run("run.bat", shell=True)

def mainmenuControls(menuState):
        if menuState == "start" and selectionsExist():
            mainMenu("started")                 
            thread = threading.Thread(target=anewprocess)
            thread.start()
            mainMenu()

这里发生的是anewprocess函数将在一个新线程中运行。 我想这可能会解决你的问题

请注意,所有要给线程的参数都应该是元组。
例如:Thread(target=somefunction,args=(arg1,arg2,arg3))
如果您想了解有关线程的更多信息,请参阅此https://www.geeksforgeeks.org/multithreading-python-set-1/

相关问题 更多 >