Tkinter special math chars
phil
phillip.watts at anvilcom.com
Thu May 19 13:17:18 EDT 2005
So far, on RedHat Linux:
I have used your method successfully in a Label
and in Canvas Text. very slow.??
In A Text box I just get \N{INFINITY}.
But thanks, I will investigate Text Box more.
Jeff Epler wrote:
> I wrote the following code:
> import Tkinter
> t = Tkinter.Label()
> t.configure(
> text=u"As the function approaches \N{INFINITY}, \N{HORIZONTAL ELLIPSIS}")
> t.pack()
> t.mainloop()
> It worked for me on Windows NT 4.0 with Python 2.4, and on RedHat 9 with
> a self-compiled Python 2.3, showing an infinity symbol and an ellipsis.
>
> u'\N{...}' stands for the Unicode character named '...'. Unicode.org
> (and other sites) have lists of Unicode character names.
>
> Tk tries very hard to find the requested character in some font
> available on the system, but when it fails it just displays a unicode
> escape sequence like "\u220e" (instead of the END OF PROOF symbol, in
> this case), and there's really no way for Python to find out and fall
> back in some graceful way.
>
> Relying on this behavior, here's a somewhat-falliable way to detect the
> presence of a symbol in the font used in a given widget:
> def symbol_exists(s, w, f = None):
> if f is None:
> f = w.cget("font")
> width_symbol = w.tk.call("font", "measure", f, s)
> width_bench = w.tk.call("font", "measure", f, "000")
> return width_symbol < width_bench
> This finds the width in pixels of the given symbol (s) and the string "000", in
> the font f. If the width of the symbol is smaller, then it's probably available.
> If it's wider, then it's probably rendered as an escape sequence like "\u220e".
> This is falliable because there's no guarantee that the symbol would not be as
> wide as 000, but also it's possible for some escape code (say \u1111) to be
> narrower than 000. Neither of these seem very likely in practice.
>
> Jeff
>
More information about the Python-list
mailing list