On 12/2/11 7:09 AM, Francisco Gracia wrote:

Â
Some of the names of the font families returned by the operating system
(be it Windows or Linux) are composed of two or more words (like *Times
New Roman CE*). Now these multiword arguments are not easily accepted by
*Tcl/Tk*, especially if they are referenced by some variable, so that
for instance tags cannot be reconfigured this way in order to apply such
fonts; or the size of sentences using them cannot be measured, two
operations that are essential for the procedure.

Multi-named fonts can be tricky.

Â
I have learned that this is a real and inherent difficulty with *Tcl*
(Harrison and McLennan, *Effective Tcl/Tk programming*: 34, 66); this is
why the original code uses such a strange syntax like
Â
    .t tag configure f[incr count] -font [list $family 10]
Â
The function *list* of *Tcl* seems to be mainly dedicated to solve this
odd problem with the dereferencing of multiword contents of variables
(*family* in this case, which holds the name of the font). But
apparently this does not work when *Tcl/Tk* are finally moved by
*Tkinter* during the execution of the script or at least I have been
unable to find a way to make it work in due form.

I'm not quite clear on what problem you are experiencing here, as there are no code snippets or Python errors outlined.

Are you just trying to understand the underlying Tcl idioms?

In Tcl, the [list $family 10] converts the multi-named font into a single string that can be parsed by the font code. Tcl's [list] idiom is very handy for things like this.

I'm not sure about how the Tkinter module interacts with Tcl at that low level, but this Python code has always worked for me in displaying and selecting a font from a listbox:

       self.fonts=list(tkFont.families())
        self.fonts.sort()

        for item in self.fonts:
            self.fontlist.insert(END, item)

        newfontlist = list(self.fontlist.get(0, END))

        if self.fontname in newfontlist:
            i = newfontlist.index(self.fontname)
            self.fontlist.see(i)
            self.fontlist.select_set(i)
            self.fontlist.select_anchor(i)
        else:
            pass

(This code is partly based on code in IDLE. The code in idleib is a bit wooly, but snippets of it are quite useful for Tkinter samples.)

Hope this helps,
Kevin



Â
Which does not mean much, as I am not a programmer or, at most, I am a
very unseasoned one. Can somebody who has had the same problem and
solved it succesfully from *Tkinter* offer me (and perhaps us) his
insight and describe the essentials of how to do it?
Â
Many thanks in advance!


_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss


--
Kevin Walzer
Code by Kevin
http://www.codebykevin.com
_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to