Tkinter bug in Misc.tkraise, Canvas.tkraise
John Michelsen
john.michelsen at gte.net
Mon Apr 5 13:04:34 EDT 1999
The following got posted in a reply tree by mistake:
I found a bug in using Tkinter to raise a canvas widget above later
packed (etc.) widgets. It seems Tkinter gets confused between the
Misc.tkraise() method and the Canvas.tkraise(item) methods.
The following script shows the problem:
from Tkinter import *
def raiseCanvas():
canvas1.lift()
#canvas1.tkraise()
#canvas1.widgetlift()
root = Tk()
canvas1 = Canvas(root, bg='blue')
canvas1.place(x=10, y=10, anchor=NW)
canvas2 = Canvas(root, bg='red')
canvas2.place(x=20, y=20, anchor=NW)
raiseButton = Button(root, text='raiseCanvas', command=raiseCanvas)
raiseButton.pack()
root.geometry("%dx%d" % (100,100))
root.mainloop()
which gives the following error:
Exception in Tkinter callback
Traceback (innermost last):
File "C:\Program Files\Python\Lib\lib-tk\Tkinter.py", line 764, in
__call__
return apply(self.func, args)
File "C:\PROGRA~1\PYTHON\RAISEC~1.PY", line 4, in raiseCanvas
canvas1.lift()
File "C:\Program Files\Python\Lib\lib-tk\Tkinter.py", line 1287, in
tkraise
self.tk.call((self._w, 'raise') + args)
TclError: wrong # args: should be ".8249616 raise tagOrId ?aboveThis?"
I made Tkinter do what I want by adding a method to the Misc
class and not the Canvas class:
class Misc...
def tkraise(self, aboveThis=None):
self.tk.call('raise', self._w, aboveThis)
lift = widgetlift = tkraise
so that widgetlift will call the tkraise in Misc and not the tkraise in
Canvas.
I discovered the error in developing a multiple document interface for
Tkinter
which can be found on: http://www2.zyvex.com/OpenChem/index.htm
Dockable toolbars and a tree widget can also be found there.
They probably don't look very good on unix yet.
John
More information about the Python-list
mailing list