Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update tkinter to use Tk 8.6.15 or (better) Tk 9.0 #124111

Open
culler opened this issue Sep 15, 2024 · 13 comments
Open

Update tkinter to use Tk 8.6.15 or (better) Tk 9.0 #124111

culler opened this issue Sep 15, 2024 · 13 comments
Labels
topic-tkinter type-feature A feature request or enhancement

Comments

@culler
Copy link
Contributor

culler commented Sep 15, 2024

Feature or enhancement

Proposal:

This issue is being opened as a prerequisite for a PR which will update _tkinter.c and Lib/test/test_tkinter so that they work with both Tk 8.6.15 and Tk 9.0.

Both Tk 8.6.15 and Tk 9.0 currently have release candidates available and will be released soon. The TclTk project has decided that there will be no release of the 8.7 branches. Tcl 9 and Tk 9 are the current development branches (both named main in the fossil repository.)

Tk 9 offers many improvements over Tk 8, and both TclTk and Python would benefit from having tkinter support for Tk 9.0.

Has this already been discussed elsewhere?

No response given

Links to previous discussion of this feature:

No response

Linked PRs

@hugovk
Copy link
Member

hugovk commented Sep 15, 2024

See also #104568.

@terryjreedy
Copy link
Member

There are 2 items on that overview issue with individual issues. The first has a solution merged. The second was waiting to know whether there would be an 8.7. "The TclTk project has decided that there will be no release of the 8.7 branches." Do you have a link?

"Tk 9 offers many improvements over Tk 8," Is there a summary page? I am particularly curious if full unicode support was added. If so, I would want 9.0 to at least be an option with our installers, as the lack thereof is the biggest problem with tk for use with IDLE.

@culler
Copy link
Contributor Author

culler commented Sep 16, 2024

"The TclTk project has decided that there will be no release of the 8.7 branches." Do you have a link?

Unfortunately, this decision was made by the Tcl Core Team (TCT) by consensus, not by our usual governance process which involves writing and voting on a TIP.
(I am a member of the TCT.) You can find a lot of discussion on the Tcl Core list and you can observe that the 8.6.15 and 9.0 versions of Tcl and Tk currently have release candidates, while Tcl and Tk 8.7 have never reached beta. (Maybe I should write such a TIP. I'll consider that.)

"Tk 9 offers many improvements over Tk 8," Is there a summary page?

The Tcl summary is here. Tk 9.0 was created as a continuation of Tk 8.7 (unlike Tcl 9.0, which has signficant differences from 8.7).

I am particularly curious if full unicode support was added. If so, I would want 9.0 to at least be an option with our installers, as the lack thereof is the biggest problem with tk for use with IDLE.

Yes, Tcl 9.0 has full unicode support. That was one of the biggest issues, of course. Switching to 9.0 means no more CESU-8. Moreover, if tkinter starts using Tk 9.0 then, as far as I can tell, that would mean that a majority of Tk users would be using Tk 9.0.

image

@serhiy-storchaka
Copy link
Member

I think that this should be split on several parts.

  • Update to Tcl/Tk 8.6.15 is a routine. It should be backported to 3.13 and 3.12. It is too late for 3.13.0, but it will be included in 3.13.1.
  • Any test changes should be backported. This would help future bugfix backports and help to compare versions if we have a regression. Tests should be passed with older Tcl/Tk versions.
  • As for automatically converting pixels to string, we usually don't do that except when wantobjects=0, in which case all values ​​are converted to strings. I think adding custom types for pixels and other Tk types might be more promising. After all, we may need to compare sizes, convert to different units, perform arithmetic operations.
  • Even if we don't plan to officially support Tcl/Tk 9.0 in older versions of Python, we should backport these changes. We simply won't be making official releases with Tcl/Tk 9.0.

Tcl/Tk 9.0 is a good news, and I look forward to using it.

@aivarannamaa
Copy link
Contributor

It should be backported to 3.13 and 3.12. It is too late for 3.13.0, but it will be included in 3.13.1.

Can it make into 3.12.7 ?

@serhiy-storchaka
Copy link
Member

Can it make into 3.12.7 ?

I hope on this, but we still have not updated the bundled version on Windows to 8.6.14 (see #116145).

@ahmadkakarr
Copy link

ahmadkakarr commented Nov 8, 2024

Tcl/Tk 9.0 is available in 3.13 on windows?

@terryjreedy
Copy link
Member

No. AFAIK, tk9.0 is still in candidate stage, not officially released. In any case, not in main yet.

@culler
Copy link
Contributor Author

culler commented Nov 9, 2024 via email

@terryjreedy
Copy link
Member

My comment was based on your posts of Sept 16 and early posts on the PR. Thank you for the update. What, then, is stopping 9.0 on main? I could not really tell from the PR. Like Serhiy, I am really looking forward to trying it out.

@culler
Copy link
Contributor Author

culler commented Nov 9, 2024

I don't think there is anything stopping it. PR #124156 is in the "awaiting merge" state.

One possible issue is that the Windows port of Tcl 9.0 puts libtommath in a separate DLL, which complicates the Python distribution. But there are build options available which will statically link libtommath into the Tcl DLL. So that issue seems to have a reasonable workaround.

@vstinner
Copy link
Member

I'm interested by a backport of the change 47cbf03 to 3.12 and 3.13 branches. In Fedora Rawhide, we have Tcl/Tk 9 and Python 3.12 and 3.13. It would be nice to support recent Tcl/Tk in stable Python versions.

I started by creating PR gh-127364 which is a simple backport from main to 3.13 branch: there is no merge conflict!

cc @hroncok

@cho-m
Copy link

cho-m commented Dec 19, 2024

With TCL 9, CPython's _tkinter.c thread support detection doesn't seem to work:

cpython/Modules/_tkinter.c

Lines 586 to 587 in f802c8b

v->threaded = Tcl_GetVar2Ex(v->interp, "tcl_platform", "threaded",
TCL_GLOBAL_ONLY) != NULL;

I'm guessing this is due to documented TCL change:

  • No --disable-threads build option. Always thread-enabled.

Current (main) _tkinter.c code causes crashes when mixing threading and tkinter probably from TCL APIs executed on the wrong thread.

Crash goes away by forcing v->threaded = 1; with TCL_MAJOR_VERSION >= 9 (or TK_MAJOR_VERSION >= 9).

cho-m added a commit to cho-m/cpython that referenced this issue Dec 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic-tkinter type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

9 participants