Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing method tkinter.Image._register #100814

Closed
TheLizzard opened this issue Jan 6, 2023 · 0 comments · Fixed by #107722
Closed

Missing method tkinter.Image._register #100814

TheLizzard opened this issue Jan 6, 2023 · 0 comments · Fixed by #107722
Labels
topic-tkinter type-bug An unexpected behavior, bug, or error

Comments

@TheLizzard
Copy link

TheLizzard commented Jan 6, 2023

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.

Linked PRs

@TheLizzard TheLizzard added the type-bug An unexpected behavior, bug, or error label Jan 6, 2023
serhiy-storchaka added a commit to serhiy-storchaka/cpython that referenced this issue Aug 6, 2023
… option

Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
serhiy-storchaka added a commit that referenced this issue Aug 7, 2023
…option (GH-107692)

Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Aug 7, 2023
…image option (pythonGH-107692)

Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
(cherry picked from commit 50e3cc9)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Aug 7, 2023
…image option (pythonGH-107692)

Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
(cherry picked from commit 50e3cc9)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
serhiy-storchaka added a commit that referenced this issue Aug 16, 2023
… image option (GH-107692) (GH-107723)

Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
(cherry picked from commit 50e3cc9)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Yhg1s pushed a commit that referenced this issue Aug 16, 2023
… image option (GH-107692) (#107722)

gh-100814: Fix exception for invalid callable value of Tkinter image option (GH-107692)

Passing a callable object as an option value to a Tkinter image now raises
the expected TclError instead of an AttributeError.
(cherry picked from commit 50e3cc9)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic-tkinter type-bug An unexpected behavior, bug, or error
Projects
None yet
3 participants