Serhiy Storchaka added the comment: I have experimented with different naming schemes.
Original output with Terry's example (actually names are longer in IDLE, since the configuration dialog is created as a child of other toplevel widget): label .3070117292.3069168812.3069169068.3069251628.3068822220.3069266540.3068822348.3068839820.3068851532 entry .3070117292.3069168812.3069169068.3069251628.3068822220.3069266540.3068822348.3068839820.3068851628 frame .3070117292.3069168812.3069169068.3069251628.3068822220.3068850604 scrollbar .3070117292.3069168812.3069169068.3069251628.3068822220.3068850604.3068851916 canvas .3070117292.3069168812.3069169068.3069251628.3068822220.3068850604.3068852108 frame .3070117292.3069168812.3069169068.3069251628.3068822220.3068850604.3068852108.3068852428 label .3070117292.3069168812.3069169068.3069251628.3068822220.3068850604.3068852108.3068852428.3068852780 checkbutton .3070117292.3069168812.3069169068.3069251628.3068822220.3068850604.3068852108.3068852428.3068852940 Using Tk command name as a base of a name: label ._toplevel1._frame1._frame2._frame73._labelframe10._frame127._canvas6._frame128._label28 entry ._toplevel1._frame1._frame2._frame73._labelframe10._frame127._canvas6._frame128._entry9 frame ._toplevel1._frame1._frame2._frame73._labelframe10._frame129 scrollbar ._toplevel1._frame1._frame2._frame73._labelframe10._frame129._scrollbar12 canvas ._toplevel1._frame1._frame2._frame73._labelframe10._frame129._canvas7 frame ._toplevel1._frame1._frame2._frame73._labelframe10._frame129._canvas7._frame130 label ._toplevel1._frame1._frame2._frame73._labelframe10._frame129._canvas7._frame130._label29 checkbutton ._toplevel1._frame1._frame2._frame73._labelframe10._frame129._canvas7._frame130._checkbutton11 Using Python class name: label ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe6._canvas6._frame105._label28 entry ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe6._canvas6._frame105._entry9 frame ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe7 scrollbar ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe7._scrollbar12 canvas ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe7._canvas7 frame ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe7._canvas7._frame106 label ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe7._canvas7._frame106._label29 checkbutton ._configdialog1._tabbedpageset1._frame1._frame61._labelframe10._verticalscrolledframe7._canvas7._frame106._checkbutton11 It is more informative, but names are usually longer. Using an abbreviation (upper letters from Python class name in camel style): label ._cd1._tps1._f1._f61._lf10._vsf6._c14._f105._l32 entry ._cd1._tps1._f1._f61._lf10._vsf6._c14._f105._e9 frame ._cd1._tps1._f1._f61._lf10._vsf7 scrollbar ._cd1._tps1._f1._f61._lf10._vsf7._s13 canvas ._cd1._tps1._f1._f61._lf10._vsf7._c17 frame ._cd1._tps1._f1._f61._lf10._vsf7._c17._f106 label ._cd1._tps1._f1._f61._lf10._vsf7._c17._f106._l33 checkbutton ._cd1._tps1._f1._f61._lf10._vsf7._c17._f106._c18 Names are short, but different classes can have the same abbreviation (e.g. Checkbutton and Canvas). This doesn't cause name clashes, just widget types become non-distinguishable by names. One problem with these schemes is that they change the rule for avoiding name conflicts. Currently you can just use names that are Python identifier -- they never conflict with generated names. With above schemes you should avoid names starting with an underscore. Other problem is that they use sequential numbering for every widget type. If you already created 100 frames, the single frame in new window will have name ._frame101. If use separate count for every parent widget, numbers can be smaller (the number is first because it is the serial number of the child in the parent widget): label .1toplevel.1frame.1frame.5frame.3labelframe.6frame.2canvas.1frame.7label entry .1toplevel.1frame.1frame.5frame.3labelframe.6frame.2canvas.1frame.8entry frame .1toplevel.1frame.1frame.5frame.3labelframe.7frame scrollbar .1toplevel.1frame.1frame.5frame.3labelframe.7frame.1scrollbar canvas .1toplevel.1frame.1frame.5frame.3labelframe.7frame.2canvas frame .1toplevel.1frame.1frame.5frame.3labelframe.7frame.2canvas.1frame label .1toplevel.1frame.1frame.5frame.3labelframe.7frame.2canvas.1frame.1label checkbutton .1toplevel.1frame.1frame.5frame.3labelframe.7frame.2canvas.1frame.2checkbutton If use separate numbering for every child type in a parent: label ._toplevel1._frame1._frame1._frame5._labelframe1._frame6._canvas1._frame1._label4 entry ._toplevel1._frame1._frame1._frame5._labelframe1._frame6._canvas1._frame1._entry2 frame ._toplevel1._frame1._frame1._frame5._labelframe1._frame7 scrollbar ._toplevel1._frame1._frame1._frame5._labelframe1._frame7._scrollbar1 canvas ._toplevel1._frame1._frame1._frame5._labelframe1._frame7._canvas1 frame ._toplevel1._frame1._frame1._frame5._labelframe1._frame7._canvas1._frame1 label ._toplevel1._frame1._frame1._frame5._labelframe1._frame7._canvas1._frame1._label1 checkbutton ._toplevel1._frame1._frame1._frame5._labelframe1._frame7._canvas1._frame1._checkbutton1 ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue27025> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com