gh-156961: Fix tkinter.font.Font for a font name returned as a Tcl object - #157028
Open
serhiy-storchaka wants to merge 1 commit into
Open
gh-156961: Fix tkinter.font.Font for a font name returned as a Tcl object#157028serhiy-storchaka wants to merge 1 commit into
serhiy-storchaka wants to merge 1 commit into
Conversation
…Tcl object
Tk can return a font name or description as a Tcl object, for example
from ttk.Style().lookup("TButton", "font"), Menu.entrycget("font"),
ttk.Entry.cget("font"), or the default value in the result of
configure(). Such an object does not compare equal to a string, so it
was not recognized as the name of an existing named font. Keep it as
is, so that it is passed back to Tk, and only convert it where it is
compared with a string.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tk can return a font name or description as a Tcl object rather than a string, for example from
ttk.Style().lookup("TButton", "font"),Menu.entrycget("font"),ttk.Entry.cget("font"), or the default value in the result ofconfigure(). Such an object does not compare equal to a string, so it was not recognized as the name of an existing named font, and the code from the issue failed withTclError: named font TkDefaultFont does not already exist. Wrapping a font description also failed, withTypeError: '_tkinter.Tcl_Obj' object is not iterable.The object is now kept as is, so that it is passed back to Tk, which reuses the font resource cached in it (this is why
FromObj()does not convert fonts to strings, see gh-153513). It is only converted where it is compared with a string.Tested with Tcl/Tk 8.6.17, 8.7b1, 9.0.4 and 9.1b1, with and without
wantobjects.The backports to 3.15, 3.14 and 3.13 need to be made manually: these branches have no wrapped font descriptions (gh-143990), so
Font.nameis always a string there and__str__needs a different fix.🤖 Generated with Claude Code