ttk.Widget.state()TclError:无效的州名

时间:2016-10-05 10:59:50

标签: python tkinter tk ttk

我尝试在tkinter中改变ttk.button状态(在主循环的开始处),如manual [实现:实际here。]

import tkinter
from tkinter import ttk

root = tkinter.Tk()

style = ttk.Style()
style.map("C.TButton",
    foreground=[('pressed', 'red'), ('active', 'blue')],
    background=[('pressed', '!disabled', 'black'), ('active', 'white')]
    )

colored_btn = ttk.Button(text="Test", style="C.TButton")
colored_btn.pack()

colored_btn.state('pressed')

root.mainloop()

导致错误:

in state return self.tk.splitlist(str(self.tk.call(self._w, "state", statespec))) _tkinter.TclError: Invalid state name p

1 个答案:

答案 0 :(得分:2)

colored_btn.state(('pressed',))

来自Python Documentation

  

statespec通常是列表或元组。

我认为这个问题来自8.6 vs 8.5 tkinter版本差异。

请注意,在有问题的手动链接(tkinter 8.5)中,有stateSpac个参数,在tkinter 8.6中有{ - 1}}。这样的事情应该总是警告你版本可能会有变化。