如何制作没有小部件的框架?

时间:2019-04-06 07:57:23

标签: python tkinter frame

我希望框架执行的操作是,当我单击“清除”按钮时,框架将被清除,但不会清除,当我输入无效的字符串然后是有效的字符串时,它会显示出痕迹过去和过去的行动。我已经尝试过通过Label.pack()来更改Label.grid(),但是更糟糕的是,当按下“清除”按钮时,“动画”看起来像是一个堆栈而没有删除任何元素

基本上,这将使它发生变化

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()

1 个答案:

答案 0 :(得分:0)

查看效果是否更好。主要更改是使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()