纺车功能并不总是退出

时间:2017-02-10 20:38:31

标签: python python-3.x text tkinter

我有一个循环旋转轮gif的功能来显示正在运行的过程。当该过程结束时,使用不同的值(开/关)再次调用该函数,并将aM更改为✓。如果我只有Label开始的几个线程,那么它们就完成了,并将threadspawner()更改为✓。如果我同时开始很多线程(如12),那么线程就会很好,但是一个或两个标签的旋转轮有时不会改为✓。

请注意,在下面的示例中,我无法让加载程序停止并更改为✓。也许这是我搞砸的地方的一部分,但在我的代码中它转换得很好。

我应该以不同的方式表示负载轮还是以不同的方式调用加载器(' off')?

我尝试为每个线程使用全局变量,并在线程启动时将其设置为True,然后在线程结束时将其设置为off。这只有在我更新加载器循环中的变量以获取新值时才有效,这意味着我必须为每个线程创建一个不同的加载器函数,这个函数有很多额外的代码。我尝试使用label循环代替while,但它没有改变任何内容。

我想为每个螺纹运行的纺车使用相同的装载功能。如果这不是最好的方法,请指出我正确的方向。

if

1 个答案:

答案 0 :(得分:1)

你正在做的问题是switch是一个局部变量,所以当loader函数启动时,微调器就会启动,但是当它停止时,{{1}传递给循环加载器函数链的参数仍为switch,因此即使标签设置为'on',文本也会立即重置以继续加载动画;当使用参数'✓'调用loader函数时,'off'变量在该函数调用的本地范围内仅具有值switch

快速而又脏的修复方法是创建一个新的全局变量,该变量可用于阻止加载器函数永远调用自身。这有很多问题,例如一次只允许一个微调器。

'off'

但是,我建议使用类更简洁的方法。 (有一些未经测试的注释建议将其转换为使用图像而不是文本)。另外,你不能安全地在主线程之外进行tkinter调用,所以虽然这不是你问的原始问题,但我使用了global_switch = 'off' def loader(label, switch): global lbl1, lbl2, global_switch if not switch==None: global_switch = switch if global_switch == 'off': .... if global_switch == 'on': .... loader(label, None) main.mainloop() 的{​​{1}}方法来代替线程和root s。

以下是我建议的解决方案:

after

注意:我还在代码中做了一些其他的小改动。