如何在Tkinter的Entry输入组件中实现点击清空的占位提示功能
解决方案
你已经完成了带占位符输入框的核心逻辑,只需要做两处调整即可生效:
1. 调整自定义类位置,补充密码框适配逻辑
原有代码里EntryWithPlaceholder类定义在输入框创建之后,Python执行时会找不到类;同时需要补充对密码框隐藏字符规则的适配,避免占位符也被显示为星号。
请将修改后的类放到创建邮箱/密码输入框的代码之前,修改后的类代码如下:
class EntryWithPlaceholder(tk.Entry): def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey', show=''): super().__init__(master) self.placeholder = placeholder self.placeholder_color = color self.default_fg_color = self['fg'] self.show = show # 保存密码显示规则 self.bind("<FocusIn>", self.foc_in) self.bind("<FocusOut>", self.foc_out) self.put_placeholder() def put_placeholder(self): self['show'] = '' # 占位符状态下不隐藏字符,正常显示提示文字 self.insert(0, self.placeholder) self['fg'] = self.placeholder_color def foc_in(self, *args): if self['fg'] == self.placeholder_color: self.delete('0', 'end') self['fg'] = self.default_fg_color self['show'] = self.show # 输入状态下恢复字符隐藏规则 def foc_out(self, *args): if not self.get(): self.put_placeholder()
2. 替换原有输入框组件
把原来调用tk.Entry创建输入框的代码,替换为调用你自定义的EntryWithPlaceholder类,传入对应占位符即可:
# 替换邮箱输入框 entry_name = EntryWithPlaceholder(frame, placeholder="请输入邮箱", textvariable = email_var, font=('arial',10,'normal')) entry_name.grid(row=1,column=2, sticky = tk.W, padx = 5, pady = 5) # 替换密码输入框 entry_password = EntryWithPlaceholder(frame, placeholder="请输入密码", textvariable = password_var, font = ('arial',10,'normal'), show = '*') entry_password.grid(row=2,column=2, sticky = tk.W, padx = 5, pady = 5)
额外优化提示
原有login函数里每次执行都会插入两条测试账号,多次运行会导致数据库内重复数据,你可以在插入前加查询判断,避免重复插入。
内容的提问来源于stack exchange,提问作者Jkkp2owjd
相关产品推荐
相关产品推荐

