Description
Bug report
When tkinter
get's a keyword argument, it tries to convert it to a string that tcl/tk can handle. The problem is that when a callable object is passed in as the value for a keyword argument, tkinter
usually calls an internal _register
method but it's missing from the Image
class. Here in tkinter/__init__.py
, tkinter
tries to call self._register(v)
but there is no method named _register
in the Image
class. There is a _register
method for Misc
and Variable
but Image
doesn't inherit from any of those. A minimal reproducible example:
import tkinter
root = tkinter.Tk()
tkinter.PhotoImage(height=print)
The expected error is: _tkinter.TclError: expected integer but got "140140827421696print"
but it's throwing AttributeError: 'PhotoImage' object has no attribute '_register'
.
The only time this bug would appear is when someone makes a mistake and calls PhotoImage
or BitmapImage
with a callable keyword parameter. So the only difference is the error message.
Your environment
The issue isn't environment dependant.
- CPython versions tested on: 3.10 but from the source code, it should be present in all 3.7+ versions of cpython.