【问题标题】:tkinter button wont release after click点击后tkinter按钮不会释放
【发布时间】: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


【解决方案1】:

(解决方案) 我发现 App.py 脚本的最后一行是: cv2.waitKey(0) 用户必须按“Enter”才能终止命令/waitKey。 使用窗口工具栏上的“X”关闭窗口,确实会关闭窗口,但不会终止命令并使按钮处于按下状态。

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

确认一下,这对 os.system 和 subprocess 都有效。

希望这有助于拯救他人,感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多