簡體   English   中英

禁用 tkinter ttk 縮放小部件

[英]Disabling tkinter ttk scale widget

我正在嘗試禁用框架中的所有 (ttk) 小部件,但似乎縮放小部件給我帶來了一些麻煩,因為它引發了以下異常:

_tkinter.TclError:未知選項“-state”

一些相關代碼:

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方法。 按鈕和條目小部件的state方法只是模仿標准按鈕和條目小部件的便利功能。

你可以像這樣重寫你的函數:

def disable_widgets(parent):
    for child in parent.winfo_children():
        child.state(["disabled"])

這里的 ttk 文檔中提到了 ttk 狀態(盡管描述幾乎無用): https ://docs.python.org/3.1/library/tkinter.ttk.html#widget-states

其它的辦法:

scale_to_disable.configure(state='disabled')  # 'normal'

您可以考慮在 Scale 類的configure處設置斷點( from tkinter.ttk import Scale )可能會有所幫助。

下面是攔截class Scale部分代碼

class Scale(Widget, tkinter.Scale):

    ...

    def configure(self, cnf=None, **kw):
        if cnf:
            kw.update(cnf)
        Widget.configure(self, **kw)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM