import tkinter
body_label = tk.Label(root, text="Body No.", font=("Arial", 30))
body_label.grid(row=1, column=0, padx=30, pady=60, sticky="ew")
body_entry = tk.Entry(root)
body_entry.grid(row=1, column=1, padx=30, pady=60, sticky="ew")
body_entry.bind("<KeyRelease>", validar_body_no)
botao_limpar_body= tk.Button(root, text="✖", font=("Arial", 12), command=lambda e=body_entry: limpar_campos_body(e))
botao_limpar_body.grid(row=1, column=2, padx=0, pady=10)
上面的代码创建了我的图形界面的一部分。我正在尝试在按钮“botao_limpar_body”上使用 IF 条件。如果“body_entry”上没有任何内容,我想隐藏该按钮,如果有,该按钮将再次出现。
有人可以帮忙吗? (抱歉,如果我的英语很混乱,我是巴西人:))
我尝试创建一个变量来存储“body_entry”,然后启动 if 条件。为了隐藏按钮,我尝试使用属性“_forget”但不起作用,因为当我初始化代码时,我的按钮被隐藏,但当我开始键入时按钮不会出现。
我建议编写自己的类继承自
Tk
以避免使用全局变量。另外,您确定要“隐藏”按钮而不仅仅是禁用它吗?隐藏可能会扰乱窗口的大小。
禁用:
import tkinter as tk
class MyWindow(tk.Tk):
def __init__(self):
super().__init__()
self.body_label = tk.Label(self, text="Body No.", font=("Arial", 30))
self.body_label.grid(row=1, column=0, padx=30, pady=60, sticky="ew")
self.body_entry = tk.Entry(self)
self.body_entry.grid(row=1, column=1, padx=30, pady=60, sticky="ew")
self.body_entry.bind("<KeyRelease>", self.validar_body_no)
self.botao_limpar_body= tk.Button(self, text="✖", font=("Arial", 12), command=self.some_command, state='disabled')
self.botao_limpar_body.grid(row=1, column=2, padx=0, pady=10)
def validar_body_no(self, e):
if not self.body_entry.get():
self.botao_limpar_body['state']='disabled'
else:
self.botao_limpar_body['state']='normal'
def some_command(self):
pass # this function does nothing currently
root = MyWindow()
root.mainloop()
如果你确实想隐藏按钮,可以使用
grid_forget
:
import tkinter as tk
class MyWindow(tk.Tk):
def __init__(self):
super().__init__()
self.body_label = tk.Label(self, text="Body No.", font=("Arial", 30))
self.body_label.grid(row=1, column=0, padx=30, pady=60, sticky="ew")
self.body_entry = tk.Entry(self)
self.body_entry.grid(row=1, column=1, padx=30, pady=60, sticky="ew")
self.body_entry.bind("<KeyRelease>", self.validar_body_no)
self.botao_limpar_body= tk.Button(self, text="✖", font=("Arial", 12), command=self.some_command)
def validar_body_no(self, e):
if not self.body_entry.get():
self.botao_limpar_body.grid_forget()
else:
self.botao_limpar_body.grid(row=1, column=2, padx=0, pady=10)
def some_command(self):
pass # this function does nothing currently
root = MyWindow()
root.mainloop()