在tkinter中为空时如何禁用输入框?

时间:2019-05-07 16:25:20

标签: python tkinter

我正在尝试使输入框为空时禁用该按钮,并在键入内容时启用该按钮。

这是按钮和Entybox所在的部分。

self.description = tk.StringVar()
self.entry_ds = ttk.Entry(self, width=25, 
                          textvariable=self.description)
self.entry_ds.grid(column=0, row=1, padx=13, pady=4)
self.entry_ds.focus()

self.co_button = ttk.Button(self, text='Confirm', command=self.on_press_ds)
self.co_button.grid(column=0, row=2, pady=4)

def on_press_ds(self):
    description = self.description.get()
    if description:
        self.master.listbox.insert('end', description)
    self.destroy_ds()
    self.destroy()

我尝试使用

if not self.description.get():
    self.co_button['state'] = 'disabled'

,并且在输入框为空时能够将其禁用,但是在输入内容时却无法启用。

1 个答案:

答案 0 :(得分:1)

最简单的方法是在相关变量上添加跟踪。在跟踪中,您可以根据当前值更改按钮的状态。

首先,定义要由跟踪调用的函数:

.reset()

接下来,创建跟踪并强制调用它以设置初始状态。您可以在创建变量的同一函数中执行此操作。

document.getElementById("reset").onclick= ()=>{ document.getElementById("form").reset() }的第一个参数告诉tkinter何时调用关联的函数。 <form id="form"> <input/> <input/> </form> <button id="reset">Reset</button>表示只要写入变量(即,值更改)就调用该函数。第二个参数是要调用的函数。

def on_entry_trace(self, *args):
    new_state = "disabled" if self.description.get() == "" else "normal"
    self.co_button.configure(state=new_state)

设置完成后,只要条目窗口小部件的值更改,就会调用该函数。

有关trace调用的函数的参数的更多信息,请参见What are the arguments to Tkinter variable trace method callbacks?

Effbot在The Variable Classes (BooleanVar, DoubleVar, IntVar, StringVar)页面上有不错的变量跟踪记录,包括有关跟踪的信息