gh-120220: Deprecate legacy methods for tracing variables in Tkinter#120223
Conversation
…inter They do not work with Tcl 9.0. Use new methods added in Python 3.6.
|
@terryjreedy, could you please take a look? Are the warning messages OK? |
terryjreedy
left a comment
There was a problem hiding this comment.
Wording seems good enough.
| "use trace_add() instead", | ||
| DeprecationWarning, stacklevel=2) | ||
| cbname = self._register(callback) | ||
| self._tk.call("trace", "variable", self._name, mode, cbname) |
There was a problem hiding this comment.
Should this line be wrapped in try...except TclError... for when run with tcl/tk 9?
There was a problem hiding this comment.
And what to do after catching the exception?
There was a problem hiding this comment.
Raise a better error message -- IF the TclError message is unclear, such as not specifying that failure us 9.0 specific. I don't have 9.0 installed to test this.
There was a problem hiding this comment.
The error message is "bad option "variable": must be add, info, or remove". It may be not so clear from Python's point of view, but you get a deprecation warning emitted immediately before error. I think that it is not worth to change the error. The error can also be raised for other reasons, so we would need to rely on parsing the error message, which can be changed in future.
There was a problem hiding this comment.
I was thinking about the case when people have DeprecationWarnings turned off. A possibility would be, when running tk9+, to immediately raise an error with more direct message 'This method does not exist in tk9, use...' right in trace_xyz itself.
There was a problem hiding this comment.
Do you suggest to write something like this?
try:
self._tk.call("trace", "variable", self._name, mode, cbname)
except _tkinter.TclError as err:
if str(err) == 'bad option "variable": must be add, info, or remove':
raise TypeError('trace_variable() is not supported '
'with Tcl 9; use trace_add() instead')
raiseThis is too verbose and fragile. If they change the error message it will not work.
There was a problem hiding this comment.
Perhaps this could use an exception note, that way it won't change the type. Just needs the message to be clear another error may have occurred.
|
When you're done making the requested changes, leave the comment: |
|
@terryjreedy, are you insisting on wrapping TclError? I don't like this, there is no precedence. |
|
Whatever I said was meant to be suggestion. I dismissed change request. Merge when you want. My personal priority for tkinter is to be able to have 9.0 available in a Windows installer. Let me know if I can do anything to help (other than the above). |
They do not work with Tcl 9.0.
Use new methods added in Python 3.6.
📚 Documentation preview 📚: https://cpython-previews--120223.org.readthedocs.build/