如何检索Combobox状态

时间:2016-11-07 17:38:01

标签: python-2.7 tkinter combobox

我正在构建tkinter应用,我使用了一些ttk小部件,包括Combobox。我需要获得combobox的状态才能执行某些操作。然而,当我试图获得状态时,它给了我一些奇怪的东西。

这是print(self.combobox["state"], DISABLED)命令的输出:

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

其中DISABLED的变量来自Tkinter

我也尝试使用self.combobox.state()获取状态,但输出相同。

注意:我可以使用comboboxself.combobox["state"] = NORMAL更改self.combobox["state"] = DISABLED的状态(当我更改状态时,我可以看到combobox为白色/灰色)。

1 个答案:

答案 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()