【问题标题】:ttk.Widget.state() TclError: Invalid state namettk.Widget.state() TclError: 无效的状态名称
【发布时间】:2016-10-05 10:59:50
【问题描述】:

我尝试在 tkinter 中更改 ttk.button 状态(在 mainloop 开始时),就像在这个 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

【问题讨论】:

  • 您问题中的链接无效。
  • 我刷新了。

标签: python tkinter tk ttk


【解决方案1】:
colored_btn.state(('pressed',))

来自Python Documentation

statespec 通常是一个列表或一个元组。

我想这个问题来自 8.6 和 8.5 的 tkinter 版本差异。

请注意,在有问题的手动链接中(tkinter 8.5)有 stateSpac 参数,在 tkinter 8.6 - statespec 中。此类事情应始终警告您版本可能会发生变化。

【讨论】:

  • 在我看来“通常”是手动参考的愚蠢陈述
  • 实际上任何可迭代的都可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2018-08-23
  • 2021-02-09
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多