【发布时间】:2011-01-25 20:48:06
【问题描述】:
我正在尝试使用 Tkinter 编写登录窗口,但无法隐藏星号格式的密码文本。这意味着密码输入是纯文本,必须避免。知道怎么做吗?
【问题讨论】:
我正在尝试使用 Tkinter 编写登录窗口,但无法隐藏星号格式的密码文本。这意味着密码输入是纯文本,必须避免。知道怎么做吗?
【问题讨论】:
快速谷歌搜索得到了这个
widget = Entry(parent, show="*", width=15)
其中widget 是文本字段,parent 是父窗口小部件(窗口、框架等),show 是要回显的字符(即Entry 中显示的字符)和width 是小部件的宽度。
【讨论】:
show='*' 是否也阻止复制/粘贴?
如果您不想创建全新的 Entry 小部件,可以这样做:
myEntry.config(show="*");
要使其再次恢复正常,请执行以下操作:
myEntry.config(show="");
我通过检查先前的答案发现了这一点,并在导入后使用 Python 解释器中的帮助功能(例如 help(tkinter.Entry) (通过扫描那里的文档)。我承认我只是猜想弄清楚如何制作又正常了。
【讨论】:
widget-name = Entry(parent,show="*")
您也可以使用项目符号:
bullet = "\u2022" #specifies bullet character
widget-name = Entry(parent,show=bullet)#shows the character bullet
【讨论】:
●,至少对于某些 Linux 系统来说这是典型的。例如:bullet = "\u25CF".
这是一个非常简单的小型演示应用程序,使用 Tkinter 隐藏和获取密码。
#Python 3.4 (For 2.7 change tkinter to Tkinter)
from tkinter import *
def show():
p = password.get() #get password from entry
print(p)
app = Tk()
password = StringVar() #Password variable
passEntry = Entry(app, textvariable=password, show='*')
submit = Button(app, text='Show Console',command=show)
passEntry.pack()
submit.pack()
app.mainloop()
希望有帮助!
【讨论】:
passEntry和submit在调用pack()后都包含None,需要先赋值变量再调用pack管理器。
我自己也在寻找这种可能性。但是条目的立即“隐藏”并没有让我满意。我在修改 tk.Entry 中找到的解决方案,从而可以延迟隐藏输入:
基本上有延迟的输入被删除替换
def hide(index: int, lchar: int):
i = self.index(INSERT)
for j in range(lchar):
self._delete(index + j, index + 1 + j)
self._insert(index + j, self.show)
self.icursor(i)
并且击键被写入一个单独的变量中。
def _char(self, event) -> str:
def del_mkey():
i = self.index(INSERT)
self._delete(i - 1, i)
if event.keysym in ('Delete', 'BackSpace'):
return ""
elif event.keysym == "Multi_key" and len(event.char) == 2: # windows stuff
if event.char[0] == event.char[1]:
self.after(10, del_mkey)
return event.char[0]
return event.char
elif event.char != '\\' and '\\' in f"{event.char=}":
return ""
elif event.num in (1, 2, 3):
return ""
elif event.state in self._states:
return event.char
return ""
如果此方法适合您,请查找PassEntry.py。
【讨论】: