2016-11-07 72 views
1

我建立Tkinter的應用程序,我使用一些ttk部件,包括Combobox。我需要獲得combobox的狀態才能執行某些操作。但是,當我嘗試獲得狀態時,它給了我一些奇怪的東西。如何檢索組合框狀態

這是從print(self.combobox["state"], DISABLED)命令輸出:

(<index object at 0x1f72c30>, 'disabled') 

其中DISABLED是從Tkinter變量。

我還嘗試了使用self.combobox.state()狀態,但輸出是一樣的。

注:I可使用self.combobox["state"] = NORMALself.combobox["state"] = DISABLED改變combobox狀態(I可以看到,combobox是白/灰當我改變狀態)。

+0

'self.combobox [ '狀態'] string' – furas

回答

1

您可以使用dir()來查看哪些方法和屬性具有對象。

print(dir(self.combobox['state'])) 

結果

['__class__', '__cmp__', '__delattr__', '__doc__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', '__unicode__', 'string', 'typename'] 

你可以看到string(方法或屬性)

如果檢查

print(self.combobox['state'].string == tk.NORMAL) 

True

str()工程太

print(str(self.combobox['state']) == tk.NORMAL) 

編輯:測試最小的工作,例如:

try: 
    # Python 2 
    import Tkinter as tk 
    import ttk 
except: 
    # Python 3 
    import tkinter as tk 
    import tkinter.ttk as ttk 

root = tk.Tk() 

c = ttk.Combobox(root) 
c.pack() 

print(c['state'], c['state'] == tk.NORMAL) 

print('normal:', c['state'].string == tk.NORMAL, str(c['state']) == tk.NORMAL) 
print('disabled:', c['state'].string == tk.DISABLED, str(c['state']) == tk.DISABLED) 

c['state'] = tk.DISABLED 

print('normal:', c['state'].string == tk.NORMAL, str(c['state']) == tk.NORMAL) 
print('disabled:', c['state'].string == tk.DISABLED, str(c['state']) == tk.DISABLED) 

root.mainloop() 
+0

感謝您的回答。我還發現'self.combobox.instate([DISABLED,])'會返回'True'或'False'。請注意,這裏的參數必須是狀態列表。 – Fejs