【问题标题】:Getting Python Tkinter Object Type获取 Python Tkinter 对象类型
【发布时间】:2015-02-01 13:40:03
【问题描述】:

我目前正在开发一个程序,该程序在 Python 程序中处理许多不同的可能入口小部件。

我需要一些代码来确定特定对象是什么类型的小部件,例如EntryCheckbutton

我尝试使用type(var) 方法无济于事(我收到错误缺少必需的变量self)以及var.__class__,但我没有取得任何进展。

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

有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: python class tkinter


    【解决方案1】:

    如果您需要将名称作为字符串,您可以使用.winfo_class() 方法:

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

    或者,您可以访问__name__ 属性:

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

    也就是说,使用isinstance 是一种更常见/pythonic 的方法:

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

    另外,您当前的代码失败了,因为 type(d).__name__ 没有返回您认为的结果:

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

    注意它返回的是type返回的类型对象的名称,而不是Checkbutton的名称。

    【讨论】:

    • 非常感谢您的回复!您建议的第一种方法返回错误; “无效的位置参数'self'”,但是第二种方法效果很好!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多