【发布时间】:2013-06-18 22:25:53
【问题描述】:
我正在使用运动控制器,因此要“单击”一个按钮,我会找出在任何给定点最靠近中间的按钮,然后使用 button.invoke() 方法。
我相信按钮和设置工作正常,因为每当我点击按钮时,它们都能正常工作。但是,当通过“button.invoke”方法调用按钮时,整个事情就冻结了。
其他可能有用的信息: - gui 正在通过 .mainloop 函数在它自己的线程中更新。 - 用鼠标点击时一切正常 - button.invoke() 方法工作正常 - 在执行简单的打印操作时。仅在切换帧时冻结。
任何帮助都会很棒,谢谢。
【问题讨论】:
-
你能分享一些代码来向我们展示更多的工作原理,尤其是关于
button.invoke()内部发生的事情吗? -
另外,
button.invoke是从与mainloop不同的线程调用的吗?这在 tkinter 中是不合法的;它可能在某些情况下有效,但在其他情况下无效,或者相同的情况有时但并非总是有效,或者它可能在一个平台或 Tk 版本上有效,但在另一个平台或 Tk 版本上无效,等等——但如果它曾经有效,那只是因为你得到了幸运的;这是不应该的。 -
我认为你已经解决了问题。问题是线程 A 正在运行 mainloop(),它只是在等待某些东西,所以它永远不会离开那条线。线程 B 在使用运动控制器时调用按钮。在这一点上,我真的应该将我的问题改为“我如何只在有限的时间内运行“Mainloop”?或者改变一些东西,以便 mainloop 处理改变”