如何在没有小部件的情况下制作框架?

问题描述 投票:1回答:1

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

这基本上会使它发生变化

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()
python tkinter frame
1个回答
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()
© www.soinside.com 2019 - 2024. All rights reserved.