我正在构建tkinter应用,我使用了一些ttk
小部件,包括Combobox
。我需要获得combobox
的状态才能执行某些操作。然而,当我试图获得状态时,它给了我一些奇怪的东西。
这是print(self.combobox["state"], DISABLED)
命令的输出:
(<index object at 0x1f72c30>, 'disabled')
其中DISABLED
的变量来自Tkinter
。
我也尝试使用self.combobox.state()
获取状态,但输出相同。
注意:我可以使用combobox
和self.combobox["state"] = NORMAL
更改self.combobox["state"] = DISABLED
的状态(当我更改状态时,我可以看到combobox
为白色/灰色)。
答案 0 :(得分: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()