Skip to content

Missing method tkinter.Image._register #100814

Closed

Description

@TheLizzard

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

Activity

  1. added 2 commits that reference this issue on Aug 6, 2023
  2. added 2 commits that reference this issue on Aug 7, 2023
  3. added a commit that references this issue on Aug 16, 2023
  4. added a commit that references this issue on Aug 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions