Dump an arbitrary widget to an image file of (almost) any kind by using XWD and ImageMagick.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | proc dumpWidget {window filename args} {
# What is the X id of the window to dump?
set id [winfo id $window]
# We'll use xwd to do the actual dump...
set cmd [list exec xwd -quiet -id $id]
# ...and ImageMagick to convert to whatever...
lappend cmd | convert
# ...but we need to be a little careful when inserting the
# arguments and handling the filenames since they are
# not guaranteed to be well-behaved words...
eval $cmd $args [list - $filename]
}
|
example usage: dumpWidget .foo.bar foobar.png -swirl 60 -interlace partition
OK, so the above looks somewhat drunken when applied to a whole screen, but it does demonstrate the capabilities quite well. :^)
Note that the window to be dumped must be raised to the top first or you will dump whatever is viewable on top of it as well; this is an X restriction, so there is very little you can do to work around it.