Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当另一个线程使用Tk在Python中完成时,如何关闭加载屏幕?_Python_Multithreading_User Interface_Consumer_Producer - Fatal编程技术网

当另一个线程使用Tk在Python中完成时,如何关闭加载屏幕?

当另一个线程使用Tk在Python中完成时,如何关闭加载屏幕?,python,multithreading,user-interface,consumer,producer,Python,Multithreading,User Interface,Consumer,Producer,我有一个使用Tkinter的Python GUI。我必须通过SSH到另一个地方获取数据。我启动了一个新线程来执行此操作,这样GUI就不会挂起。在此期间,我想弹出一个屏幕,让用户知道它正在加载。一旦程序完成获取数据,我想关闭加载屏幕。我必须做什么才能让我的主循环识别线程已经完成了?我曾尝试使用该线程关闭主循环中存在的加载屏幕,但后来我发现这不起作用 我见过一些不使用GUI的生产者-消费者模型,它们有while循环。但这对我没有帮助。我也不想下载和安装其他软件包,但导入是可以的。谢谢你的帮助 让线程

我有一个使用Tkinter的Python GUI。我必须通过SSH到另一个地方获取数据。我启动了一个新线程来执行此操作,这样GUI就不会挂起。在此期间,我想弹出一个屏幕,让用户知道它正在加载。一旦程序完成获取数据,我想关闭加载屏幕。我必须做什么才能让我的主循环识别线程已经完成了?我曾尝试使用该线程关闭主循环中存在的加载屏幕,但后来我发现这不起作用


我见过一些不使用GUI的生产者-消费者模型,它们有while循环。但这对我没有帮助。我也不想下载和安装其他软件包,但导入是可以的。谢谢你的帮助

让线程在完成时设置一个标志。让GUI定期检查该标志,并在设置该标志时关闭窗口


您可以通过创建一个检查标志的函数来检查标志,如果未设置标志,则在之后使用使其在几百毫秒后再次运行。线程退出后窗口不会立即消失,但只要延迟不超过几百毫秒,用户就永远不会注意到

Jack是否可以让辅助线程引发一个绑定到GUI的虚拟事件?可能。Tkinter不是线程安全的,但是raise方法可能不会引起问题。我想值得一试。谢谢布莱恩!我用了你的建议,用“之后”来连续投票。长期保持这种状态可以吗?这会浪费系统资源吗?@Jack:资源的使用是最小的,几乎到了无法测量的程度(假设它所做的只是检查一个标志),尽管一旦它完成了它的工作并取消了加载屏幕,保持它运行是没有意义的。