Search code examples
pythontkinter

Python:Tkinter -- How do I get cursor to show busy status


I'm trying to make Tkinter show a busy cursor. Unfortunately, I must be missing something terribly obvious. Following is a very simple program that reproduces my problem:

 from Tkinter import *
 import time

 def do_something():
     print "starting"
     window.config(cursor="wait")
     time.sleep(5)
     window.config(cursor="")
     print "done"
     return

 root = Tk()
 menubar = Menu(root)
 filemenu = Menu(menubar, tearoff=0)
 filemenu.add_command(label="Do Something", command=do_something)
 filemenu.add_command(label="Exit", command=root.quit)
 menubar.add_cascade(label="File", menu=filemenu)
 root.config(menu=menubar)
 root.mainloop()

I'm not seeing any change in the cursor


Solution

  • Make do_something like this:

    def do_something():
        print "starting"
        root.config(cursor="watch")
        root.update()
        time.sleep(5)
        root.config(cursor="")
        print "done"
    

    Basically, I did three things:

    1. Replaced window with root (since window isn't defined and root is the window's handle).

    2. Added root.update() just after the line that configures the cursor.

    3. Removed the unnecessary return (this didn't cause any errors, but why have it?).