【问题标题】:Python's tkinter smart entry passwordPython的tkinter智能入口密码
【发布时间】:2015-07-26 10:50:10
【问题描述】:

我想创建一个密码条目。

一个简单的解决方案是:

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

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

【问题讨论】:

  • 您需要帮助解决问题的哪一部分?还是您要求我们为您编写整个代码?
  • 默认情况下我已经隐藏了所有条目,但我遇到问题的部分是仅显示添加到条目中的最后一项隐藏了几秒钟
  • 我不认为它在 tkinter 中是开箱即用的。您可以使用root.after 并记住用户的输入来实现它。或者添加一个显示/隐藏密码的复选框。
  • 谢谢。你能详细说明一下.after

标签: python python-3.x tkinter passwords


【解决方案1】:

用 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()

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

最后一点,我真的不建议这样做任何事情。始终隐藏密码所有时间!如果要减少新选择的密码出现拼写错误的机会,通常的做法是让用户输入两次密码。

【讨论】:

    【解决方案2】:

    这是一个用复选按钮显示密码的简单技巧。 勾选后密码可见

    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()
    

    【讨论】:

    • 这很好,但不是 OP 要求的。
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2023-03-27
    • 2015-11-15
    • 1970-01-01
    • 2020-07-27
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多