You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If working, a window should appear with a plot in it, and it should respond to mouse events etc. It seems that on CPython main, this is broken, but works with PYTHON_BASIC_REPL=1 set.
Cc: @tacaswell, do I have this right? IIUC this works due to Tkinter's built-in use of PyOS_InputHook, matplotlib itself doesn't touch it.
>>> Fatal Python error: _PyThreadState_Attach: non-NULL old thread state
Python runtime state: initialized
Current thread 0x00007fad7b63c740 (most recent call first):
File "/home/mdboom/py/lib/python3.14/_pyrepl/reader.py", line 713 in call_PyOS_InputHook
File "/home/mdboom/py/lib/python3.14/_pyrepl/reader.py", line 648 in handle1
File "/home/mdboom/py/lib/python3.14/_pyrepl/reader.py", line 692 in readline
File "/home/mdboom/py/lib/python3.14/_pyrepl/readline.py", line 376 in multiline_input
File "/home/mdboom/py/lib/python3.14/_pyrepl/simple_interact.py", line 176 in run_multiline_interactive_console
File "/home/mdboom/py/lib/python3.14/_pyrepl/__main__.py", line 48 in interactive_console
File "/home/mdboom/py/lib/python3.14/_pyrepl/__main__.py", line 51 in <module>
File "<frozen runpy>", line 88 in _run_code
File "<frozen runpy>", line 198 in _run_module_as_main
Extension modules: numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, PIL._imaging, kiwisolver._cext, PIL._imagingmath, PIL._imagingtk (total: 17)
[1] 3965 IOT instruction python
Here's a much easier reproducer with no external dependencies:
from tkinter import *
root = Tk()
w = Label(root, text='Foo')
w.pack()
Current behavior I'm seeing:
CPython main: No window
CPython main / PYTHON_BASIC_REPL=1: Window is displayed, updated automatically with each line of entry (matches 3.12) #119843: Fatal Python error: _PyThreadState_Attach: non-NULL old thread state #119843 / PYTHON_BASIC_REPL=1: Window is displayed, updated automatically with each line of entry (matches 3.12)
Activity
pythongh-119842: Honor PyOS_InputHook in the new REPL
pythongh-119842: Honor PyOS_InputHook in the new REPL
mdboom commentedon May 31, 2024
Here's a good reproducer to ensure your changes are working (on Linux):
(
make installis required to getpkgconfigworking for all the dependencies).If working, a window should appear with a plot in it, and it should respond to mouse events etc. It seems that on CPython main, this is broken, but works with
PYTHON_BASIC_REPL=1set.Cc: @tacaswell, do I have this right? IIUC this works due to Tkinter's built-in use of PyOS_InputHook, matplotlib itself doesn't touch it.
EDIT: See a simpler reproducer below
mdboom commentedon May 31, 2024
With #119843 (currently), this fails with:
mdboom commentedon May 31, 2024
Here's a much easier reproducer with no external dependencies:
Current behavior I'm seeing:
CPython main: No window
CPython main / PYTHON_BASIC_REPL=1: Window is displayed, updated automatically with each line of entry (matches 3.12)
#119843:
Fatal Python error: _PyThreadState_Attach: non-NULL old thread state#119843 / PYTHON_BASIC_REPL=1: Window is displayed, updated automatically with each line of entry (matches 3.12)
tacaswell commentedon May 31, 2024
@mdboom Correct. PyQt, wxpython, and the gtk bindings all provide their own verision of
PyOS_InputHookas well and mpl provides one for macOSX.To be 100% sure the event loop is running as expected also add a "print on click" callback:
pythongh-119842: Honor PyOS_InputHook in the new REPL
pythongh-119842: Honor PyOS_InputHook in the new REPL
pythongh-119842: Honor PyOS_InputHook in the new REPL
pythongh-119842: Honor PyOS_InputHook in the new REPL
Merge branch 'main' into pythongh-119842
Merge branch 'main' into pythongh-119842
gh-119842: Honor PyOS_InputHook in the new REPL (GH-119843)
[3.13] pythongh-119842: Honor PyOS_InputHook in the new REPL (pythonG…
[3.13] gh-119842: Honor PyOS_InputHook in the new REPL (GH-119843) (G…
pythongh-119842: Honor PyOS_InputHook in the new REPL (pythonGH-119843)
pythongh-119842: Honor PyOS_InputHook in the new REPL (pythonGH-119843)
pythongh-119842: Honor PyOS_InputHook in the new REPL (pythonGH-119843)