我正在尝试使输入框为空时禁用该按钮,并在键入内容时启用该按钮。
这是按钮和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'
,并且在输入框为空时能够将其禁用,但是在输入内容时却无法启用。
答案 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)页面上有不错的变量跟踪记录,包括有关跟踪的信息