Python tkinter button.invoke方法故障

Python tkinter button.invoke方法故障,python,tkinter,Python,Tkinter,我在玩一个运动控制器,因此要“单击”一个按钮,我要找出哪个按钮在任何给定点最靠近中间,然后使用button.invoke()方法 我相信这些按钮和设置都能正常工作,因为每当我点击按钮时,它们都能正常工作。然而,当通过“button.invoke”方法调用按钮时,整个过程就冻结了 其他可能有用的信息: -gui正在通过.mainloop函数在自己的线程中更新。 -当鼠标点击时,一切正常 -在执行简单的打印操作时,button.invoke()方法工作正常。它只在切换帧时冻结 任何帮助都会很好,谢谢

我在玩一个运动控制器,因此要“单击”一个按钮,我要找出哪个按钮在任何给定点最靠近中间,然后使用button.invoke()方法

我相信这些按钮和设置都能正常工作,因为每当我点击按钮时,它们都能正常工作。然而,当通过“button.invoke”方法调用按钮时,整个过程就冻结了

其他可能有用的信息: -gui正在通过.mainloop函数在自己的线程中更新。 -当鼠标点击时,一切正常 -在执行简单的打印操作时,button.invoke()方法工作正常。它只在切换帧时冻结


任何帮助都会很好,谢谢。

你是说mainloop在创建小部件的单独线程中运行吗?如果是这样,那就是你的问题。您只能从一个线程调用tkinter函数。

您能否共享一些代码,向我们展示更多的工作,尤其是
按钮内部的情况。invoke()
?还有
按钮。invoke
是从与
mainloop
不同的线程调用的?这在特金特是不合法的;它可能在某些情况下有效,但在其他情况下无效,或者同一情况可能有时有效,但并不总是有效,或者它可能在一个平台或Tk版本上有效,但在另一个平台或Tk版本上无效,等等。但如果它真的有效,那只是因为你运气好;不应该的。我想你已经击中了问题的头部。问题是线程A正在运行mainloop(),它只是在等待一些东西,所以它永远不会离开该行。线程B在使用运动控制器时调用该按钮。我真的应该在这一点上把我的问题改为“我如何只在有限的时间内运行“Mainloop”?或者改变一些东西,以便Mainloop能够处理更改“对不起,我应该更清楚一些”。所以问题来了:Thead A-负责在初始化过程中创建GUI,而运行“A.mainloop()”,当它检测到自己的按钮点击时,这是正常的。线程B-控制运动摄影机。因为这个想法是为了让他们不用鼠标,所以我使用了“最近的_button.invoke()”方法。但是-这意味着命令是从线程B启动的,因为与按钮单击不同,它不是gui上的更改(不是物理按钮按下,只是执行关联的命令),线程a随后在其主循环中拾取该命令-它正在调用该命令。@user2498925:您不能从另一个线程运行
invoke
方法。常见的解决方案是,线程将某些内容放到线程安全队列中,然后让GUI线程定期轮询队列。stackoverflow上有这样的例子,但问题是GUI线程正在运行mainloop函数。并且在GUI死亡之前不会执行任何其他行。@user2498925:没有问题-mainloop是一个循环,这意味着它可以定期运行。在之后使用
来安排队列在未来几毫秒内进行轮询,然后让该函数为无限期运行的轮询重新安排自身。此网站上有几个示例,例如: