Currently, each instance of codecontext.CodeContext creates 2 root.after loops. There should be at most two loops for the class, and preferably fewer by using the new reload().
The loops are never explicitly shut down. Since conversion to a feature, the following appears after running test_idle.
.invalid command name "109891384timer_event"
invalid command name "109891512font_timer_event"
This is because of
File "F:\dev\3x\lib\idlelib\idle_test\test_outwin.py", line 20, in setUpClass
w = cls.window = outwin.OutputWindow(None, None, None, root)
File "F:\dev\3x\lib\idlelib\outwin.py", line 78, in __init__
File "F:\dev\3x\lib\idlelib\editor.py", line 319, in __init__
text.bind("<<toggle-code-context>>", # added to traceback
The statement, which creates an instance, was added as part of the conversion. However, the outwin tests were merged a week before the conversion, so this message might have started the. In any case, editor.EditorWindow.load_extension does the same thing in doing the binding. It is not clear why there is no message from other editor-creating tests.
I want to fix at least this before next Monday's cutoff for new releases. I will first try is after_cancel in a __del__ method.
I added a line to editor.py in bpo-31529 for this error message. In _close() in editor.py, self.text was being set to None which wasn't calling the del function of multicall. I added a line to unbind "<>", which made the error go away. I don't know if that's the proper fix or not, but it seemed the error was occurring because the after wasn't being removed at the right time.
The underlying issue is trying to coordinate two somewhat independent object systems (Python and Tcl). I don't know why the after loops were (apparently) stopped before bpo-27099 and not after. The only difference I know of is the dropping of the reference to CodeContext instances in .unload_extensions, called from ._close. CodeContext did not have a .close method.
I tried the first thing I thought might work and it did, so I stopped. I don't know why unbinding the toggle function was enough. I expect that we will eventually review ._close. It should help when the menu and editor are separated a bit.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
The text was updated successfully, but these errors were encountered: