Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I am currently working on a program which handles a number of different possible entry widgets in a Python program.

I need some code to be able to determine what type of widget a particular object is, for example Entry or Checkbutton.

I have tried using the type(var) method to no avail (I get the error missing required variable self) as well as the var.__class__ and I am making no progress.

for d in dataTypes:
    if isinstance(d, Entry):
        print("Found Entry!")
    elif type(d).__name__ == 'Checkbutton':
        print("Found Checkbox!")

Does anyone have any idea of how I can solve this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
955 views
Welcome To Ask or Share your Answers For Others

1 Answer

If you need the name as a string, you can use the .winfo_class() method:

for d in dataTypes:
    if d.winfo_class() == 'Entry':
        print("Found Entry!")
    elif d.winfo_class() == 'Checkbutton':
        print("Found Checkbutton!")

Or, you could access the __name__ attribute:

for d in dataTypes:
    if d.__name__ == 'Entry':
        print("Found Entry!")
    elif d.__name__ == 'Checkbutton':
        print("Found Checkbutton!")

That said, using isinstance is a more common/pythonic approach:

for d in dataTypes:
    if isinstance(d, Entry):
        print("Found Entry!")
    elif isinstance(d, Checkbutton):
        print("Found Checkbutton!")

Also, your current code is failing because type(d).__name__ does not return what you think it does:

>>> from tkinter import Checkbutton
>>> type(Checkbutton).__name__
'type'
>>>

Notice that it returns the name of the type object returned by type, not the name of Checkbutton.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...