使用绑定 Button 和 ButtonRelease 在 Tkinter 中显示和隐藏密码?

show and hide password in Tkinter with binding Button and ButtonRelease?

我正在学习 Python3 和 tkinter。我试图通过绑定 <Button> 显示密码并通过绑定 <ButtonRelease> 隐藏密码,但我没有任何解决方案。我只能显示密码,然后错误发生:

这是我的代码:

import tkinter as tk

def show(e):
    passwd_entry.config(show="")
# def hide(event):
#     passwd_entry.config(show="*")
root = tk.Tk()

passwd_entry = tk.Entry(root, show='*', width=20)
passwd_entry.pack(side=tk.LEFT)

toggle_btn = tk.Button(root, text='Show Password', width=15, command=show)
toggle_btn.pack(side=tk.LEFT)
toggle_btn.bind("<Button>", show)
# toggle_btn.bind("<ButtonRelease>", hide)

root.mainloop()

这是我点击button时的错误:

TypeError: show() missing 1 required positional argument: 'e'

tkinter 实例创建需要在您要调用的函数定义事件之前发生。

还使用 lambda 函数在 bind 中调用 show 函数,如下面的代码所述。应该有帮助。

import tkinter as tk

root = tk.Tk()

def show():
    passwd_entry.config(show="")
def hide():
    passwd_entry.config(show="*")

passwd_entry = tk.Entry(root, show='*', width=20)
passwd_entry.pack(side=tk.LEFT)

toggle_btn = tk.Button(root, text='Show Password', width=15)
toggle_btn.pack(side=tk.LEFT)
toggle_btn.bind("<ButtonPress>", lambda event:show())
toggle_btn.bind("<ButtonRelease>", lambda event:hide())

root.mainloop()