如何使用 Tkinter 创建密码输入字段

问题描述 投票:0回答:5

我正在尝试使用 Tkinter 编写登录窗口,但我无法隐藏星号格式的密码文本。这意味着密码输入是纯文本,必须避免这种情况。知道怎么做吗?

python tkinter
5个回答
111
投票

快速谷歌搜索得到了这个

widget = Entry(parent, show="*", width=15)

其中

widget
是文本字段,
parent
是父窗口小部件(窗口、框架等),
show
是要回显的字符(即
Entry
中显示的字符)和
width 
是小部件的宽度。


39
投票

如果您不想创建全新的 Entry 小部件,您可以这样做:

myEntry.config(show="*")

要使其再次恢复正常,请执行以下操作:

myEntry.config(show="")

我通过检查之前的答案并使用Python解释器中的帮助功能(例如导入后的help(tkinter.Entry)(通过扫描那里的文档)发现了这一点)。我承认我只是猜测如何使其正常再次。


16
投票
widget_name = Entry(parent,show="*")

您还可以使用项目符号:

bullet = "\u2022" #specifies bullet character
widget_name = Entry(parent,show=bullet)#shows the character bullet

11
投票

这是一个小型且极其简单的演示应用程序,使用 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() 

希望有帮助!


1
投票

我自己也在寻找这种可能性。但立即“隐藏”该条目并不令我满意。我在修改 tk.Entry 中找到的解决方案,从而可以延迟隐藏输入:

PassEntry

基本上有延迟的输入被删除并被替换

        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

© www.soinside.com 2019 - 2024. All rights reserved.