gpt4 book ai didi

python - 有没有办法使 tkinter Frame 变灰(禁用)?

转载 作者:太空狗 更新时间:2023-10-29 20:54:04 26 4
gpt4 key购买 nike

我想在 tkinter 中创建一个带有两个框架的 GUI,并让底部框架变灰直到发生某些事件。

下面是一些示例代码:

from tkinter import *
from tkinter import ttk

def enable():
frame2.state(statespec='enabled') #Causes error

root = Tk()

#Creates top frame
frame1 = ttk.LabelFrame(root, padding=(10,10,10,10))
frame1.grid(column=0, row=0, padx=10, pady=10)

button2 = ttk.Button(frame1, text="This enables bottom frame", command=enable)
button2.pack()

#Creates bottom frame
frame2 = ttk.LabelFrame(root, padding=(10,10,10,10))
frame2.grid(column=0, row=1, padx=10, pady=10)
frame2.state(statespec='disabled') #Causes error

entry = ttk.Entry(frame2)
entry.pack()

button2 = ttk.Button(frame2, text="button")
button2.pack()

root.mainloop()

这是否可能而不必单独将 frame2 的所有小部件变灰?

我使用的是 Tkinter 8.5 和 Python 3.3。

最佳答案

不确定它有多优雅,但我通过添加找到了解决方案

for child in frame2.winfo_children():
child.configure(state='disable')

它循环并禁用 frame2 的每个子级,并通过更改 enable() 来从根本上扭转这一点

def enable(childList):
for child in childList:
child.configure(state='enable')

此外,我删除了 frame2.state(statespec='disabled'),因为它不能满足我的需要,而且还会引发错误。

完整代码如下:

from tkinter import *
from tkinter import ttk

def enable(childList):
for child in childList:
child.configure(state='enable')

root = Tk()

#Creates top frame
frame1 = ttk.LabelFrame(root, padding=(10,10,10,10))
frame1.grid(column=0, row=0, padx=10, pady=10)

button2 = ttk.Button(frame1, text="This enables bottom frame",
command=lambda: enable(frame2.winfo_children()))
button2.pack()

#Creates bottom frame
frame2 = ttk.LabelFrame(root, padding=(10,10,10,10))
frame2.grid(column=0, row=1, padx=10, pady=10)

entry = ttk.Entry(frame2)
entry.pack()

button2 = ttk.Button(frame2, text="button")
button2.pack()

for child in frame2.winfo_children():
child.configure(state='disable')

root.mainloop()

关于python - 有没有办法使 tkinter Frame 变灰(禁用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com