Need a Progress Bar/Meter for Tkinter

klappnase klappnase at web.de
Fri Mar 5 17:52:52 EST 2004


benjamin schollnick <bscholln at mac.com> wrote in message news:<040320041859589376%bscholln at mac.com>...
> Folks,
> 
>    I am really not having much luck...
> 
>    I thought the ContriD addon for Python MegaWidgets had a progress
> bar, but can't find the site any more...  (It's been a long time since
> I did any Tkinter GUI work...)
> 
>    So far, I have had no luck with METER from TIX...  Tix on Windows
> 2000 seems to be far from a suitable system.  It is complaining that
> the TIX8183.dll can not be loaded....
> 
>    So far, I have also examined EASYGUI, and a few others and have not
> been able to find a simple Progress bar.
> 
>    Can anyone point me towards a working Tkinter based progress bar?
> 
>          - Benjamin

Hi Benjamin,

I wrote a simple progress bar widget for Tkinter a while ago I use as
a replacement for the Tix.Meter . It looks and behaves mostly like a
Tix.Meter widget. Here's the code:

##############################file Meter.py####################
import Tkinter

class Meter(Tkinter.Frame):
    '''A simple progress bar widget.'''
    def __init__(self, master, fillcolor='orchid1', text='',
value=0.0, **kw):
        Tkinter.Frame.__init__(self, master, bg='white', width=350,
height=20)
        self.configure(**kw)
        
        self._c = Tkinter.Canvas(self, bg=self['bg'],
width=self['width'], height=self['height'],\
                                 highlightthickness=0, relief='flat',
bd=0)
        self._c.pack(fill='x', expand=1)
        self._r = self._c.create_rectangle(0, 0, 0,
int(self['height']), fill=fillcolor, width=0)
        self._t = self._c.create_text(int(self['width'])/2,
int(self['height'])/2, text='')
        
        self.set(value, 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
        if text == None:
            #if no text is specified get the default percentage
string:
            text = str(int(round(100 * value))) + ' %'
        self._c.coords(self._r, 0, 0, int(self['width']) * value,
int(self['height']))
        self._c.itemconfigure(self._t, text=text)

######################################################################

You can use the set() method to change the "value"; if you don't want
any text inside the progress bar use the text="" option (default is a
string like "75 %").

I hope this helps

Michael



More information about the Python-list mailing list