Tkinter 按钮功能

问题描述 投票:0回答:1
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”但不起作用,因为当我初始化代码时,我的按钮被隐藏,但当我开始键入时按钮不会出现。

python tkinter button
1个回答
0
投票

我建议编写自己的类继承自

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

© www.soinside.com 2019 - 2024. All rights reserved.