[Tkinter-discuss] Stopping a for loop with a sleep() funciton in it

Guilherme Polo ggpolo at gmail.com
Fri Jul 11 01:47:03 CEST 2008


On Thu, Jul 10, 2008 at 8:45 PM, Guilherme Polo <ggpolo at gmail.com> wrote:
> On Thu, Jul 10, 2008 at 8:24 PM, Alexnb <alexnbryan at gmail.com> wrote:
>>
>>
>>
>> Guilherme Polo wrote:
>>>
>>> On Thu, Jul 10, 2008 at 7:31 PM, Alexnb <alexnbryan at gmail.com> wrote:
>>>>
>>>>
>>>>
>>>> Guilherme Polo wrote:
>>>>>
>>>>> On Thu, Jul 10, 2008 at 5:57 PM, Alexnb <alexnbryan at gmail.com> wrote:
>>>>>>
>>>>>> Okay, so I have a for loop with a sleep command. I want the loop to
>>>>>> continue
>>>>>> until it is told to stop. I want to tell it to stop when a list goes
>>>>>> from
>>>>>> empty to having something. The problem is that when that loop starts,
>>>>>> the
>>>>>> program pretty much stops with it.
>>>>>
>>>>> You need to remove the use of sleep and use "after" instead. You keep
>>>>> scheduling your task till the condition is not met anymore, then you
>>>>> stop scheduling it with "after".
>>>>>
>>>>>> To make things harder, I really want that
>>>>>> to be it's own class, so I have to pass it the list that triggers the
>>>>>> stopping, but I can only pass it the list once. So I don't think it is
>>>>>> possible.
>>>>>
>>>>> It is, just pass some other object along which can call the method
>>>>> "after".
>>>>>
>>>>>> But if this made sense to anyone, and you have a suggestion I
>>>>>> would love it. Heres the full code: (but at the bottom, the Open
>>>>>> function
>>>>>> is
>>>>>> really the only thing that matters)
>>>>>>
>>>>>
>>>>> If you want help based on code, you have to post a short-enough code
>>>>> that demonstrates the problem.
>>>>>
>>>>>> from Tkinter import *
>>>>>> import time
>>>>>>
>>>>>> class BusyBar(Frame):
>>>>>> ...
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> -- Guilherme H. Polo Goncalves
>>>>> _______________________________________________
>>>>> Tkinter-discuss mailing list
>>>>> Tkinter-discuss at python.org
>>>>> http://mail.python.org/mailman/listinfo/tkinter-discuss
>>>>>
>>>>>
>>>>
>>>> Okay, so I modified the bottom code to this:
>>>>
>>>> def Open(root):
>>>>
>>>>    bb = BusyBar(root, text='Grabbing Definitions')
>>>>    bb.pack(side=LEFT, expand=NO)
>>>>
>>>>
>>>>    def sleeper():
>>>>        root.update
>>>
>>> What if you change this to root.update() ?
>>>
>>>>        root.after(1, sleeper)
>>>
>>> after works with milliseconds, not seconds, be aware.
>>>
>>>>    bb.on()
>>>>    root.update_idletasks()
>>>>
>>>>    sleeper()
>>>>
>>>>    #for i in range(0, 100):
>>>>        #time.sleep(0.1)
>>>>        #root.update()
>>>>    bb.of()
>>>>
>>>> but it doesn't repeat. What am I missing?
>>>>
>>>
>>>
>>> --
>>> -- Guilherme H. Polo Goncalves
>>> _______________________________________________
>>> Tkinter-discuss mailing list
>>> Tkinter-discuss at python.org
>>> http://mail.python.org/mailman/listinfo/tkinter-discuss
>>>
>>>
>>
>> Well, what was happening before is that the bar would just be at a
>> standstill. After making it update() it moved a little, but was just a
>> standstill at a different place, if that makes sense. Any more ideas? heres
>> the code:
>>
>> def Open(root):
>>
>>    bb = BusyBar(root, text='Grabbing Definitions')
>>    bb.pack(side=LEFT, expand=NO)
>>
>>    bb.on()
>>    root.update_idletasks()
>>
>>    def sleeper():
>>        root.update()
>>        root.after(1, sleeper)
>
> Did you ignore my last email where I said after takes milliseconds,
> not seconds ? And this will forever, not what you want apparently.
>

I forgot a word there, "... And this will run forever ...", sorry

>>
>>    sleeper()
>>
>>    #for i in range(0, 100):
>>        #time.sleep(0.1)
>>        #root.update()
>>    bb.of()
>
> The code you have pasted in the last two emails don't show the problem
> you are having. I guess someone else will have to look at your entire
> code to give more help.
>


-- 
-- Guilherme H. Polo Goncalves


More information about the Tkinter-discuss mailing list