1import Tkinter
2
3def get_tk_root():
4    try:
5        root = Tkinter._default_root
6    except AttributeError:
7        # it is possible to disable default root in Tkinter, although
8        # I haven't seen people doing it (but apparently someone did it
9        # here).
10        root = None
11
12    if root is None:
13        # create a new master only if there isn't one already
14        root = Tkinter.Tk()
15
16    return root
17
18def root_deiconify():
19    root = get_tk_root()
20    root.deiconify()
21
22def root_withdraw():
23    root = get_tk_root()
24    root.withdraw()
25
26
27def simulate_mouse_click(widget, x, y):
28    """Generate proper events to click at the x, y position (tries to act
29    like an X server)."""
30    widget.event_generate('<Enter>', x=0, y=0)
31    widget.event_generate('<Motion>', x=x, y=y)
32    widget.event_generate('<ButtonPress-1>', x=x, y=y)
33    widget.event_generate('<ButtonRelease-1>', x=x, y=y)
34