<br><br><div class="gmail_quote">2011/12/3 Michael Lange <span dir="ltr">&lt;<a href="mailto:klappnase@web.de">klappnase@web.de</a>&gt;</span> said:<br><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Francisco,<br>
</blockquote><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">The problem in you code is not the white space in the font name but the<br>

white space in the tag name ...<br>
</blockquote><div><br>You are right, Michael, that was a mistake on my side. It was not a typo, but a<br>confusion due to my bad knowledge of *Tcl*&#39;s syntax and to my not<br>having given due consideration to the bussines at hand. Changing the name of the tag to an only word eliminates the problem in this case and the tag&#39;s handling becomes unproblematic.<br>
<br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">... and then it worked as expected.<br>
</blockquote><div><br>But with this not all problems are solved. Although the display<br>varies with the machine used, if one scans carefully<br>the whole output, one usually finds one or more lines where long font<br>names of several words invade the area of the samples display; this should not happen and does not happen with Tcl&#39;s script. This is due to the<br>
malfunction of the measuring function and in this case one cannot<br>avoid that the string to be measured has several words; on the contrary this should be the normal case.<br><br>It seems however that I have been lucky enough to find an apparently general solution. You can see it in the transcription of the whole script that follows; for the moment this seems to be my final version.<br>
<br>I even consider the patch general because it also solves the difficulty of your initial sample code, so that while<br><br>&gt;&gt;&gt; c = &#39;Bitstream Vera Sans 12&#39;<br>&gt;&gt;&gt; l.config(font=c)<br><br>continues originating an error,<br>
<br>&gt;&gt;&gt; c = &#39;&quot;[list Bitstream Vera Sans 12]&quot;&#39;<br>&gt;&gt;&gt; l.config(font=c)<br><br>seems to work.<br><br>I want to thank you very much for your kindness and your interest.<br><br>Best regards<br>
<br>Francisco<br><br># *Sampler.py*<br># Display the names of the typographical fonts<br># available in the present machine<br># with a sample of the appearance of each one.<br><br># Python version of the following *Tcl* code<br>
# offered as example in the *font* manual page of *TkDocs*:<br><br># pack [text .t -wrap none] -fill both -expand 1<br># set count 0<br># set tabwidth 0<br># foreach family [lsort -dictionary [font families]] {<br>#    .t tag configure f[incr count] -font [list $family 10]<br>
#    .t insert end ${family}:\t {} \<br>#            &quot;This is a simple sampler\n&quot; f$count<br>#    set w [font measure [.t cget -font] ${family}:]<br>#    if {$w+5 &gt; $tabwidth} {<br>#        set tabwidth [expr {$w+5}]<br>
#        .t configure -tabs $tabwidth<br>#    }<br># }<br><br><br>from tkinter import *<br>from tkinter import font<br><br># creation of the main window<br>master = Tk()<br><br># creation of a text widget<br>tw = Text( master )<br>
tw.config( wrap = NONE )<br>tw.pack( fill = BOTH, expand = 1 )<br><br>tw.insert( END, &quot;Display of available fonts:\n\n&quot; )<br><br>count = 0           # cardinal of the element<br>tabwidth = 0        # tabulator&#39;s position (in pixel)<br>
<br># identification of the font in use (default) <br>f1 = tw.cget( &#39;font&#39; )<br><br># a measurement function to be applied later<br># is a method of class *tkinter.font.Font*, so that<br># it is good to get now the required instance of it<br>
fo = font.Font( font = ( f1, 10 ) )<br><br># let us get the alphabetically ordered list<br># of all the font families available in this machine<br>sampler = sorted( list( font.families() ) )<br><br># handling and display of its elements<br>
for f in sampler :<br>    # the counter is updated<br>    count += 1<br>    # the provided font name is displayed<br>    # plus a separator and a tabulator<br>    tw.insert( END, f + &quot;:\t&quot; )<br>    # creation of an individual name for the tag<br>
    # to be applied to this item&#39;s sample<br>    ftag = &#39;f&#39; + str( count )<br>    # creation and typographical configuration of *ftag*<br>    tw.tag_config( ftag, font = ( f, 10 ) )<br>    # the sample text is finally tagged and displayed<br>
    tw.insert( END, &quot;This is a simple sampler\n&quot;, ftag )<br>    <br>    # nice columnar disposition of the output by<br>    # a clean and clever (re)configuration of the tabulator<br>    <br>    f = f + &#39;:&#39;<br>
    if &#39; &#39; in f :       # the name has several words<br>        # (these strings of several words<br>        # are not well handled here by the complex *Tkinter/Tcl/Tk*;<br>        # fortunately it seems that the problem can be solved<br>
        # by mimicking *Tcl*&#39;s syntax for the occasion,<br>        # i.e. by flanking them with<br>        # the *magic* prefix:     &#39;&quot;[list &#39;<br>        # and the *magic* suffix: &#39;]&quot;&#39;      )<br>
        f = &#39;&quot;[list &#39; + f + &#39;]&quot;&#39;        <br><br>    w = fo.measure( f )         # in pixel as unit<br>    if ( w + 5 ) &gt; tabwidth :<br>        tabwidth = w + 5<br>        # this aligns all the lines as required<br>
        tw.config( tabs = tabwidth )<br><br>if __name__ == &#39;__main__&#39; :<br>    master.mainloop()<br><br><br></div><br></div>