[Tutor] Tkinter progress bar not responding when moved

tax botsis taxbotsis at gmail.com
Thu May 12 22:55:25 CEST 2011


I am trying to use a progress bar for my application and used the following
code by Michael Lange (
http://tkinter.unpythonic.net/wiki/ProgressMeter?action=PackagePages).
However, the progress bar stops responding when I move it. I haven't
modified class declaration and _demo but created my own modified function
[]:

class Meter(Tkinter.Frame):
    def __init__(self, master, width=300, height=20, bg='white',
fillcolor='orchid1',\
                 value=0.0, text=None, font=None, textcolor='black', *args,
**kw):
        Tkinter.Frame.__init__(self, master, bg=bg, width=width,
height=height, *args, **kw)
        self._value = value

        self._canv = Tkinter.Canvas(self, bg=self['bg'],
width=self['width'], height=self['height'],\
                                    highlightthickness=0, relief='flat',
bd=0)
        self._canv.pack(fill='both', expand=1)
        self._rect = self._canv.create_rectangle(0, 0, 0,
self._canv.winfo_reqheight(), fill=fillcolor,\
                                                 width=0)
        self._text = self._canv.create_text(self._canv.winfo_reqwidth()/2,
self._canv.winfo_reqheight()/2,\
                                            text='', fill=textcolor)
        if font:
            self._canv.itemconfigure(self._text, font=font)

        self.set(value, text)
        self.bind('<Configure>', self._update_coords)

    def _update_coords(self, event):
        '''Updates the position of the text and rectangle inside the canvas
when the size of
        the widget gets changed.'''
        # looks like we have to call update_idletasks() twice to make sure
        # to get the results we expect
        self._canv.update_idletasks()
        self._canv.coords(self._text, self._canv.winfo_width()/2,
self._canv.winfo_height()/2)
        self._canv.coords(self._rect, 0, 0,
self._canv.winfo_width()*self._value, self._canv.winfo_height())
        self._canv.update_idletasks()

    def get(self):
        return self._value, self._canv.itemcget(self._text, 'text')

    def set(self, value=0.0, text=None):
        #make the value failsafe:
        if value < 0.0:
            value = 0.0
        elif value > 1.0:
            value = 1.0
        self._value = value
        if text == None:
            #if no text is specified use the default percentage string:
            text = str(int(round(100 * value))) + ' %'
        self._canv.coords(self._rect, 0, 0, self._canv.winfo_width()*value,
self._canv.winfo_height())
        self._canv.itemconfigure(self._text, text=text)
        self._canv.update_idletasks()


def _demo(meter, value):
    meter.set(value)
    if value < 1.0:
        value = value + 0.005
        meter.after(50, lambda: _demo(meter, value))
    else:
        meter.set(value, 'TM completed - Please close this window')

# this is where progress bar is loaded and where I have added my own stuff
def test():
    if __name__ == '__main__':
        root2 = Tkinter.Tk(className=' Text Mining Progress')
        m = Meter(root2, relief='ridge', bd=3)
        m.pack(fill='x')
        i=0.0
        for fileid in reader.fileids():
            m.set(i, 'Processing will take a few minutes...')
            i=i+1.000/len(reader.fileids()) # here I increment the colored
bar in each iteration
            m.after(1000, lambda: _demo(m, i))
            print str(fileid)[:-4],document_features(reader.raw(fileid))# I
call some other processes here
        root2.withdraw()


Thanks
Tax
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20110512/879dbda4/attachment.html>


More information about the Tutor mailing list