2014-12-03 63 views
1

我目前正在研究一個處理Python程序中的許多不同可能的入口小部件的程序。獲取Python Tkinter對象類型

我需要一些代碼才能確定某個特定對象的類型,例如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!") 

有沒有人有任何想法我可以解決這個問題?

回答

3

如果需要的字符串名字,你可以使用.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' 
>>> 

注意,它返回由typeCheckbutton沒有名字返回類型對象的名稱。

+0

非常感謝您的回覆!您建議的第一種方法返回錯誤; 「無效的位置參數'自我'」,但第二種方法完美地工作!非常感謝您的幫助! – JonIsAmazingYa 2014-12-04 12:53:30