1# List a remote app's widget tree (names and classes only)
2
3import sys
4import string
5
6from Tkinter import *
7
8def listtree(master, app):
9    list = Listbox(master, name='list')
10    list.pack(expand=1, fill=BOTH)
11    listnodes(list, app, '.', 0)
12    return list
13
14def listnodes(list, app, widget, level):
15    klass = list.send(app, 'winfo', 'class', widget)
16##      i = string.rindex(widget, '.')
17##      list.insert(END, '%s%s (%s)' % ((level-1)*'.   ', widget[i:], klass))
18    list.insert(END, '%s (%s)' % (widget, klass))
19    children = list.tk.splitlist(
20            list.send(app, 'winfo', 'children', widget))
21    for c in children:
22        listnodes(list, app, c, level+1)
23
24def main():
25    if not sys.argv[1:]:
26        sys.stderr.write('Usage: listtree appname\n')
27        sys.exit(2)
28    app = sys.argv[1]
29    tk = Tk()
30    tk.minsize(1, 1)
31    f = Frame(tk, name='f')
32    f.pack(expand=1, fill=BOTH)
33    list = listtree(f, app)
34    tk.mainloop()
35
36if __name__ == '__main__':
37    main()
38