Here is an attempt to write a script to display each widget available in Tk. It made the assumption that all widgets begin with a lowercase letter. But this assumption seems not valid as for instance ttk::deprecated is not a widget at all or clipboard is not listed.
#
# the dynamic list of Tk widgets
#
puts " Tk version [package require Tk]"
puts " ----"
set tkCommands [lsort [info commands "::tk::\[a-z\]*"]]
foreach cmd $tkCommands {
puts [string range $cmd 6 end]
}
exit It gives :
Tk version 8.5.7 ---- button canvas checkbutton entry frame label labelframe listbox mc mcmax mcmaxamp menubutton message panedwindow radiobutton scale scrollbar spinbox text toplevel
It works only with version 8.5 so far.
JH This completely misses the themed Tk widget set (::ttk::*).
LGT This script tries to correct this :
#
# the dynamic list of Tk widgets
#
puts " Tk version [package require Tk]"
puts " ----"
set tkCommands [lsort [info commands "::tk::\[a-z\]*"]]
set ttkCommands [lsort [info commands "::ttk::\[a-z\]*"]]
set allCommands [concat $tkCommands $ttkCommands]
foreach cmd $allCommands {
puts [string range $cmd 2 end]
}
exit It gives :
Tk version 8.5.7
----
tk::button
tk::canvas
tk::checkbutton
tk::entry
tk::frame
tk::label
tk::labelframe
tk::listbox
tk::mc
tk::mcmax
tk::mcmaxamp
tk::menubutton
tk::message
tk::panedwindow
tk::radiobutton
tk::scale
tk::scrollbar
tk::spinbox
tk::text
tk::toplevel
ttk::button
ttk::checkbutton
ttk::clickToFocus
ttk::combobox
ttk::copyBindings
ttk::cursor
ttk::deprecated
ttk::deprecated'warning
ttk::do'deprecate
ttk::entry
ttk::focusFirst
ttk::frame
ttk::globalGrab
ttk::grabWindow
ttk::label
ttk::labelframe
ttk::menubutton
ttk::notebook
ttk::paned
ttk::panedwindow
ttk::progressbar
ttk::radiobutton
ttk::releaseGrab
ttk::scale
ttk::scrollbar
ttk::separator
ttk::setCursor
ttk::setTheme
ttk::sizegrip
ttk::style
ttk::takefocus
ttk::takesFocus
ttk::themes
ttk::traverseTo
ttk::treeviewHere is another attempt, which misses also ttk:: commmands, but not clipboard command and seems closer to documentation commands list :
#
# the dynamic list of Tk commands
#
set tclCommands [lsort [info commands]]
puts "[llength $tclCommands] tcl commands."
set tkVersion [package require Tk]
set allCommands [lsort [info commands]]
puts "[llength $allCommands] tcl and tk ($tkVersion) commands."
set tkCommands {}
foreach element $allCommands {
if { [lsearch $tclCommands $element] < 0 } {
lappend tkCommands $element
}
}
foreach cmd $tkCommands {
puts $cmd
}
exit It gives :
92 tcl commands.
152 tcl and tk (8.5.7) commands.
.
auto_mkindex
auto_mkindex_old
auto_reset
bell
bind
bindtags
button
canvas
checkbutton
clipboard
destroy
entry
event
focus
font
frame
grab
grid
image
label
labelframe
listbox
lower
menu
menubutton
message
option
pack
panedwindow
pkg_mkIndex
place
radiobutton
raise
registry
scale
scrollbar
selection
spinbox
tclPkgSetup
tclPkgUnknown
tcl_findLibrary
text
thread_load
thread_source
tk
tk_chooseColor
tk_chooseDirectory
tk_getOpenFile
tk_getSaveFile
tk_menuSetFocus
tk_messageBox
tk_popup
tk_textCopy
tk_textCut
tk_textPaste
tkwait
toplevel
winfo
wmTWu - 2025-03-04 09:44:00
All the scripts above does NOT give The list of Tk widgets (regardless of Tk and/or ttk and/or BWidget)!
You have to check each returned command name afterwards by creating a (temporary) widget of that class in a catch.
Don't forget to destroy it at the end of the check! Be aware of toplevel and dialogs (e.g. on BWidget),
which may need an after to break a possibly set grab.