python - 如何在python tkinter中的占位符条目上隐藏密码输入
问题描述
我想要一个由以下代码完成的占位符条目。但我需要对用户隐藏的输入密码(可能是星号的形式。)
from tkinter import *
root=Tk()
root.geometry("300x200+600+250")
root.config(background="#E0FFFF")
root.resizable(False,False)
def userText(event):
e1.delete(0,END)
usercheck=True
def passText(event):
e2.delete(0, END)
passcheck=True
a=StringVar()
b=StringVar()
usercheck=False
passcheck=False
Label(root,text="User name",bg="#E0FFFF").place(x=20,y=50)
e1= Entry(root,textvariable=a)
e1.place(x=100,y=50)
e1.insert(0,"Enter username")
e1.bind("<Button>",userText)
Label(root,text="Password",bg="#E0FFFF").place(x=20,y=95)
e2= Entry(root,textvariable=b)
e2.place(x=100,y=95)
e2.insert(0,"Enter password")
e2.bind("<Button>",passText)
root.mainloop()
解决方案
扩展tkinter.Entry
显示占位符文本和*
密码条目。
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()
username = Entry(root, "username")
username.pack()
password = Entry(root, "password")
password.pack()
root.mainloop()
推荐阅读
- php - 加密密码哈希作为胡椒的替代品
- data-structures - 如何在 Rust 中定义双向树结构?
- python - 如何根据 DFA1 和 DFA2 的转换创建 DFA 联合转换字典
- python - 通过键和值合并两个字典
- python - 如何在单词列表中查找子字符串
- node.js - 在另一个函数调用回调函数出错后,async.parallel 的函数正在工作,为什么?
- r - 不同层中的独立数据和组颜色
- java - 如何从组合中排除 ToolBar
- r - 根据列表/字符选择目录中的文件,出现模式 =
- javascript - Python Flask 不显示 Javascript