我该怎么做才能制作没有小部件的框架?

What can I do to make the frame without widgets?

我想让框架做的是当我点击 'clear' 按钮时,框架被清理但没有,当我输入一个无效的字符串然后输入一个有效的字符串时,它显示了过去和过去行动的痕迹。我已经尝试将 Label.grid () 更改为 Label.pack (),但更糟糕的是,当 'clear' 按钮按下时,'animation' 看起来像一个没有删除任何元素的堆栈按下

这基本上就是让它发生变化的原因

from tkinter import *
import tkinter.ttk as ttk

def clear():
    area.delete(0,END)
    frame.config(bd=1, relief=SUNKEN)
    frame.update()
    status = Label(frame) 
    status.grid(row=0, column=0, sticky=NSEW)


def statusVal(value):
    if not value == 0:
        status = Label(frame, background="#ff4242", fg="#262626", text="Cadena invalida", anchor="center") 
        status.grid(row=0, column=0)
        frame.config(bd=1, relief=SUNKEN, background="#ff4242")
        frame.update()
    else:
        status = Label(frame, background="#56ed42", fg="#262626", text="Cadena valida", anchor="center") 
        status.grid(row=0, column=0)
        frame.config(bd=1, relief=SUNKEN, background="#56ed42")
        frame.update()
#Test
def validation():
    capture = area.get()
    if capture == '1':
        return statusVal(0)
    else:
        return statusVal(1)

root = Tk()
root.geometry("300x150+300+300")

area = Entry(root)
area.grid(row=1, column=0, columnspan=2, sticky=E+W+S+N, padx=5)

frame = Frame(root, bd=1, relief=SUNKEN)
frame.grid(row=2, column=0, padx=5, pady=5, columnspan=2, sticky=W+E+S+N)
frame.columnconfigure(0,weight=5) 
frame.rowconfigure(0,weight=5)


abtn = Button(root, text="Validate", command=validation)
abtn.grid(row=1, column=3)

cbtn = Button(root, text="Clear", command=clear)
cbtn.grid(row=2, column=3, pady=5)

root.mainloop()

看看这个效果是否更好。主要的变化是让 status Label 始终存在并根据需要隐藏或取消隐藏它——而不是每次调用 validation() 函数时都创建一个新的。我还删除了明确更新不必要的 frame 的代码。

from tkinter import *
import tkinter.ttk as ttk


def clear():
    area.delete(0,END)
    status.grid_remove()  # Hide. but remember grid options.

def statusVal(value):
    if not value == 0:
        status.config(background="#ff4242", fg="#262626", text="Cadena invalida",
                      anchor="center")
        status.grid() # Unhide
    else:
        status.config(background="#56ed42", fg="#262626", text="Cadena valida",
                      anchor="center")
        status.grid() # Unhide

#Test
def validation():
    capture = area.get()
    if capture == '1':
        statusVal(0)
    else:
        statusVal(1)

# Main
root = Tk()
root.geometry("300x150+300+300")

area = Entry(root)
area.grid(row=1, column=0, columnspan=2, sticky=E+W+S+N, padx=5)

frame = Frame(root, bd=1, relief=SUNKEN)
frame.grid(row=2, column=0, padx=5, pady=5, columnspan=2, sticky=W+E+S+N)
frame.columnconfigure(0,weight=5)
frame.rowconfigure(0,weight=5)

# Initialize status Label.
status = Label(frame, anchor="center")
status.grid(row=0, column=0)
status.grid_remove()  # Hide it.

abtn = Button(root, text="Validate", command=validation)
abtn.grid(row=1, column=3)

cbtn = Button(root, text="Clear", command=clear)
cbtn.grid(row=2, column=3, pady=5)

root.mainloop()