score:1

Accepted answer

Tkinter isn't thread safe. You cannot call methods on widgets from any thread other than the one where the widget was created. Adding locking won't help.

For something as simple as sliding a menu in and out, you don't need threads. There are several examples of doing animation with Tkinter by leveraging the event loop. Basically the algorithm looks like this:

def animate(...):
    <move the widget one or two pixels>
    <if the widget needs to move some more>:
        self.canvas.after(100, animate)

What it does is simple: it moves your widget one or two pixels, checks to see if it's fully visible or not, and if not, it reschedules itself to run again in a few milliseconds. You can adjust the speed and smoothness of the animation by adjusting how many pixels you move on each iteration, and how many milliseconds between each frame of animation.