| # List a remote app's widget tree (names and classes only) |
| |
| import sys |
| import string |
| |
| from Tkinter import * |
| |
| def listtree(master, app): |
| list = Listbox(master, name='list') |
| list.pack(expand=1, fill=BOTH) |
| listnodes(list, app, '.', 0) |
| return list |
| |
| def listnodes(list, app, widget, level): |
| klass = list.send(app, 'winfo', 'class', widget) |
| ## i = string.rindex(widget, '.') |
| ## list.insert(END, '%s%s (%s)' % ((level-1)*'. ', widget[i:], klass)) |
| list.insert(END, '%s (%s)' % (widget, klass)) |
| children = list.tk.splitlist( |
| list.send(app, 'winfo', 'children', widget)) |
| for c in children: |
| listnodes(list, app, c, level+1) |
| |
| def main(): |
| if not sys.argv[1:]: |
| sys.stderr.write('Usage: listtree appname\n') |
| sys.exit(2) |
| app = sys.argv[1] |
| tk = Tk() |
| tk.minsize(1, 1) |
| f = Frame(tk, name='f') |
| f.pack(expand=1, fill=BOTH) |
| list = listtree(f, app) |
| tk.mainloop() |
| |
| if __name__ == '__main__': |
| main() |