Python的tkinter智能输入密码

时间:2015-07-26 10:50:11

标签: python python-3.x tkinter passwords

我想创建一个密码条目。

一个简单的解决方案是:

password = Entry(root, font="Verdana 22")
password.config(show="*");

但问题是,为了避免打字错误,我想显示点击的项目仅在几秒钟内可见,而其他一切都被隐藏。几秒钟后,一切都被隐藏了。

2 个答案:

答案 0 :(得分:3)

用Tkinter做你想做的事情并不容易,但是这里有些接近:当你按一个键时它会显示条目的全部内容,但是一秒后文本会再次被隐藏。

我在Python 2上开发了这个;在Python 3上使用它将Tkinter更改为tkinter

import Tkinter as tk

class PasswordTest(object):
    ''' Password Entry Demo '''
    def __init__(self):
        root = tk.Tk()
        root.title("Password Entry Demo")

        self.entry = e = tk.Entry(root)
        e.pack()
        e.bind("<Key>", self.entry_cb)

        b = tk.Button(root, text="show", command=self.button_cb)
        b.pack()

        root.mainloop()

    def entry_cb(self, event):
        #print(`event.char`, event.keycode, event.keysym )
        self.entry.config(show='')
        #Hide text after 1000 milliseconds
        self.entry.after(1000, lambda: self.entry.config(show='*'))

    def button_cb(self):
        print('Contents:', repr(self.entry.get()))

PasswordTest()

仅显示输入的最后一个字符将会很棘手。您必须手动修改显示的字符串,同时将实际密码字符串保存在单独的变量中,这有点繁琐,因为用户可以随时移动插入点光标。

最后一点,我确实不建议像这样做任何。将密码隐藏在所有次!如果您想减少新选密码中拼写错误的可能性,通常的做法是让用户输入密码两次。

答案 1 :(得分:0)

这是一个使用checkbutton查看密码的简单技巧。 选中时,密码将可见

from Tkinter import * 
from tkinter import ttk


def show_hide_psd():
    if(check_var.get()):
        entry_psw.config(show="")
    else:
        entry_psw.config(show="*")  


window = Tk() 
window.wm_title("Password") 

window.geometry("300x100+30+30") 
window.resizable(0,0)

entry_psw = Entry(window, width=30, show="*", bd=3)
entry_psw.place(x = 5, y = 25)

check_var = IntVar()
check_show_psw = Checkbutton(window, text = "Show", variable = check_var, \
                 onvalue = 1, offvalue = 0, height=2, \
                 width = 5, command = show_hide_psd)
check_show_psw.place(x = 5, y = 50)

window.mainloop()