gh-140146: Use Tcl_CreateChannelHandler to enable piping to stdin with tkinter on Windows #140147
+42
−45
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.
When using tkinter in an interactive Python session, the
EventHook
function inModules/_tkinter.c
runs the Tcl/Tk event loop, and exits once data becomes available on stdin (i.e., when the user types in the next Python command).The
EventHook
function monitors for input on stdin usingTcl_CreateFileHandler
.As
Tcl_CreateFileHandler
is Unix-only, for Windows instead the_kbhit
function from Microsoft Windows is used.However, this prevents stdin from being used with a pipe (see Issue #140146 ), as
_kbhit
checks for a keystroke on an actual keyboard.This PR replaces
Tcl_CreateFileHandler
byTcl_CreateChannelHandler
andTcl_GetStdChannel(TCL_STDIN)
, which do not depend on platform.This has two advantages:
Modules/_tkinter.c
.