I tried to update the rectangle on a canvas to get the visual effect of progressbar. It works all right if I delete the existing objects (rectangle and text) and create a new one. However, if I invoke canvas.itemconfig() to update the existing objects' options, gui just went nuts. I am more than happy to receive any help and advise.
My code is provided as follows: ------------------------------------Start of Code------------------------------------ import Tkinter import threading import time class Progressbar(Tkinter.Frame): def __init__(self, parent=None, color='white', width=200, height=15): Tkinter.Frame.__init__(self, parent) self.pack(expand=Tkinter.YES, fill=Tkinter.BOTH) canv = Tkinter.Canvas(self, bg=color, relief=Tkinter.SUNKEN) canv.config(width=width, height=height) canv.pack(side=Tkinter.LEFT, expand=Tkinter.YES, fill=Tkinter.BOTH) self.canv = canv self.width = width self.height = height progress = -10 rect = canv.create_rectangle(0, 0, 0, height, fill='beige') text = canv.create_text(width/2, height*2/3, text='0%') self.rect = rect self.text = text self.progress = progress self.parent = parent parent.progressbar = self self.UpdateProgress() def SetProgress(self, progress=0): canv = self.canv width = self.width height = self.height rect = self.rect text = self.text ## canv.delete(rect) ## canv.delete(text) ## rect = canv.create_rectangle(0, 0, progress*width/100, height, ## fill='beige') ## text = canv.create_text(width/2, height*2/3, ## text='%s' %(str(progress)) + '%') canv.itemconfig(rect, width=width*progress/100) ## comment this canv.itemconfig(text, text='%s' %(str(progress)) + '%') ## comment this ## self.rect = rect ## self.text = text def UpdateProgress(self): progress = self.progress progress = progress + 10 self.progress = progress self.SetProgress(progress) if progress < 100: self.after(500, self.UpdateProgress) if __name__ == '__main__': root = Tkinter.Tk() Progressbar(parent=root) root.mainloop() ------------------------------------End of Code------------------------------------ uncomment the lines and comment out the itemconfig() lines to see the difference in gui's behaviours. Thanks, -- This is a UTF-8 formatted mail ----------------------------------------------- James C.-C.Yu
-- http://mail.python.org/mailman/listinfo/python-list