Python 禁用tkinter ttk缩放小部件
我正试图禁用一个帧中的所有(ttk)小部件,但scale小部件似乎给我带来了一些麻烦,因为它引发了以下异常: _tkinter.TclError:未知选项“-状态” 一些相关代码:Python 禁用tkinter ttk缩放小部件,python,user-interface,tkinter,ttk,Python,User Interface,Tkinter,Ttk,我正试图禁用一个帧中的所有(ttk)小部件,但scale小部件似乎给我带来了一些麻烦,因为它引发了以下异常: _tkinter.TclError:未知选项“-状态” 一些相关代码: import tkinter as tk from tkinter import ttk def disable_widgets(parent): for child in parent.winfo_children(): child.config(state = 'disabled')
import tkinter as tk
from tkinter import ttk
def disable_widgets(parent):
for child in parent.winfo_children():
child.config(state = 'disabled')
root = tk.Tk()
# Frame full of widgets to toggle
frame_of_widgets = ttk.Frame(root)
frame_of_widgets.pack()
# Button to be disabled
button_to_disable = ttk.Button(frame_of_widgets)
button_to_disable.pack()
# Entry to be disabled
entry_to_disable = ttk.Entry(frame_of_widgets)
entry_to_disable.pack()
# Scale to be disabled
scale_to_disable = ttk.Scale(frame_of_widgets)
scale_to_disable.pack()
# Button that disables widgets in frame
disable_button = ttk.Button(root,text="Disable",command= lambda: disable_widgets(frame_of_widgets))
disable_button.pack()
root.mainloop()
它适用于按钮和条目,但不适用于比例。我认为ttk的好处之一是使小部件与常用方法和属性更加统一,因此我猜可能是我错误地访问了所有这三个小部件?对于ttk小部件,您使用
状态
方法。按钮和条目小部件的state
方法只是模拟标准按钮和条目小部件的一个方便功能
您可以像这样重写函数:
def disable_widgets(parent):
for child in parent.winfo_children():
child.state(["disabled"])
这里的ttk文档中提到了ttk状态(尽管描述近乎无用):另一种方式:
scale_to_disable.configure(state='disabled')#'normal'
可以考虑在类代码的<代码>配置< /代码>中设置断点(<代码>从TKTIL.TTK导入比例)可能会得到一些帮助。 以下是截取
等级等级的部分代码
class Scale(Widget, tkinter.Scale):
...
def configure(self, cnf=None, **kw):
if cnf:
kw.update(cnf)
Widget.configure(self, **kw)
这正是我需要的,谢谢!我以前尝试过child.state('disabled'),它似乎也适用于按钮和条目,但不适用于刻度。事实证明,把它列成一个清单是成功的。同样有趣的是,“正常”和“启用”似乎也不起作用,因为我需要使用!“残疾”。再次感谢你!请不要张贴代码的图片。当作为图像发布时,它是不可搜索的,人们不能复制它。(
Python37\Lib\tkinter\ttk.py->class Scale…
)不直接在图片中编写代码的原因是我认为在本地代码中找到答案很重要,所以我只提供源代码的位置,我希望用户可以自己去看看,即使我编写图片的代码,也没有用,因为我无法编写所有依赖的代码,而且很少有人愿意阅读长篇大论,这就是为什么我鼓励用户查看本机代码并希望您理解。图像的可用性很差-无法搜索,视力受损的人将无法获得任何信息。谢谢您的建议,我改进了我的答案,我意识到图片仍然可以用文字表达。