Python tkinter按钮在单击后不会释放

Python tkinter按钮在单击后不会释放,python,user-interface,tkinter,Python,User Interface,Tkinter,我是python开发新手,目前正在使用tkinter构建gui 单击时,我的按钮按预期工作,打开另一个窗口显示面边界框,但是当我关闭面窗口并返回按钮主窗口时,按钮仍显示为已单击(按下/凹陷),我无法单击任何其他按钮或关闭窗口 单击按钮后如何释放该按钮 def btn1(): os.system("python App.py group.jpg") button1 = Button(window, text = "Button 1", comman

我是python开发新手,目前正在使用tkinter构建gui

单击时,我的按钮按预期工作,打开另一个窗口显示面边界框,但是当我关闭面窗口并返回按钮主窗口时,按钮仍显示为已单击(按下/凹陷),我无法单击任何其他按钮或关闭窗口

单击按钮后如何释放该按钮

def btn1():
    os.system("python App.py group.jpg")

button1 = Button(window, text = "Button 1", command=btn1).grid(row=0, column=0)
(解决方案) 我发现App.py脚本的最后一行是:cv2.waitKey(0) 用户必须按“回车”键才能终止commmand/waitKey。 使用窗口工具栏上的“X”关闭窗口会关闭窗口,但不会终止命令,并使按钮保持按下状态

我已将该值修改为特定的时间参数2500,即2500毫秒,因此不需要用户参与。尽管如前所述,只需按“回车/回车”即可终止命令并释放按钮

要确认,这对os.system和子流程都有效


希望这有助于节省时间,并感谢大家的帮助。

在其
命令=
函数返回之前,该按钮不会恢复正常。显然,当您关闭窗口时,您正在启动的程序不会立即退出。一种可能是使用
子流程
模块启动另一个程序,而不等待它完成-但请注意,这将允许您启动该程序的多个实例。谢谢,我将研究子流程。是否可以在函数定义def btn1()中添加一个return语句:该语句将释放按钮???函数在
os.system()返回后自动返回,但在启动的程序完成之前不会发生这种情况。(在那一行之前的
return
意味着程序永远不会启动。)这就是为什么我建议使用
os.system()
。我实现了如下子流程:def btn1():facesDetect=subprocess.run([“python”、“App.py”、“group.jpg]”)它成功地运行了该命令,但与os.system一样,该按钮保持按下状态。我尝试在APP.py文件的末尾添加一个quit(),但似乎没有帮助。我不明白为什么命令没有完成,按钮没有释放,因为命令会相应地执行和显示,并且App.py文件中没有其他需要运行的代码。。如果我使用另一个GUI库而不是tinkter,我可以避免这个问题吗?您可能希望使用类似
subprocess.Popen()
的东西,它不会等待进程完成(尽管在任何情况下,找出为什么其他程序不退出都是一个好主意)。我认为不同的GUI库在这里的行为不会有任何不同。