【发布时间】:2020-10-26 17:53:38
【问题描述】:
我是 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)
【问题讨论】:
-
该按钮在其
command=函数返回之前不会恢复正常 - 显然,当您关闭其窗口时,您正在启动的程序不会立即退出。一种可能性是使用subprocess模块来启动另一个程序,而无需等待它完成 - 但请注意,这将允许您启动该程序的多个实例。 -
谢谢,我会调查子进程。是否可以在函数定义 def btn1() 中添加返回语句:这将释放按钮???
-
函数在
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 库在这里的行为不会有任何不同。
标签: python user-interface tkinter