以登录界面为例:
代码:
import tkinter as tk
class Entry(tk.Entry):
def __init__(self, master, placeholder):
super().__init__(master)
self.placeholder = placeholder
self._is_password = True if placeholder == "password" else False
self.bind("<FocusIn>", self.on_focus_in)
self.bind("<FocusOut>", self.on_focus_out)
self._state = 'placeholder'
self.insert(0, self.placeholder)
def on_focus_in(self, event):
if self._is_password:
self.configure(show='*')
if self._state == 'placeholder':
self._state = ''
self.delete('0', 'end')
def on_focus_out(self, event):
if not self.get():
if self._is_password:
self.configure(show='')
self._state = 'placeholder'
self.insert(0, self.placeholder)
使用:
if __name__ == "__main__":
root = tk.Tk()
root.geometry("300x200+600+250")
username = Entry(root, "username")
username.pack()
password = Entry(root, "password")
password.pack()
root.mainloop()
运行结果:
效果:
- 鼠标进入后“username”没了,可以用get()获取内容
但是:
这个子类虽然继承了tk.Entry但是并不能使用width,以及其他关键字。
把它改成这样试试
def __init__(self, master, placeholder,**kw):
super().__init__(master, **kw)