This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients rhettinger, serhiy.storchaka, terry.reedy
Date 2016-06-02.07:34:50
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1464852891.51.0.959683151072.issue27025@psf.upfronthosting.co.za>
In-reply-to
Content
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
History
Date User Action Args
2016-06-02 07:34:51serhiy.storchakasetrecipients: + serhiy.storchaka, rhettinger, terry.reedy
2016-06-02 07:34:51serhiy.storchakasetmessageid: <1464852891.51.0.959683151072.issue27025@psf.upfronthosting.co.za>
2016-06-02 07:34:51serhiy.storchakalinkissue27025 messages
2016-06-02 07:34:50serhiy.storchakacreate