【问题标题】:In Tkinter how do I make it so when a "Show Password button" is clicked it is switched with a "Hide password" button在 Tkinter 中,我如何做到这一点,以便在单击“显示密码按钮”时使用“隐藏密码”按钮进行切换
【发布时间】:2021-07-15 16:34:22
【问题描述】:

我正在做一个学校项目,非常需要帮助。我试过的代码如下:

  def ShowPassword():
    PasswordEntry = tk.Entry(window, show="", font=2)
    canvas1.create_window(250, 230, window=PasswordEntry)
    ShowPasswordButton.destroy()
    canvas1.create_window(420, 230, window=HidePasswordButton)

def HidePassword():
    PasswordEntry = tk.Entry(window, show="*", font=2)
    canvas1.create_window(250, 230, window=PasswordEntry)
    HidePasswordButton.destroy()
    canvas1.create_window(420, 230, window=ShowPasswordButton)


ShowPasswordButton = tk.Button(window, height=1, width=12, text= "Show Password", command=ShowPassword)
canvas1.create_window(420, 230, window=ShowPasswordButton)
HidePasswordButton = tk.Button(window, height=1, width=12, text="Hide Password", command=HidePassword)

程序从显示密码切换到隐藏密码一次,然后按钮消失。非常感谢任何帮助。

【问题讨论】:

  • 首先,为什么要在画布内创建所有小部件?也不要创建新条目,而是使用:<tk.Entry>.config(show=...) 来更改条目的属性。
  • 这是我第一次使用 Tkinter,我的学校从未真正教过我,所以这就是我发现作品的方式,使用画布有什么问题,你会建议我改用什么?谢谢
  • 您可以使用<your widget>.place(x=x, y=y) 来放置您的小部件。这使用.place 几何管理器。 tkinter 有 3 个几何管理器:.place(...).pack(...).grid(...)

标签: python user-interface tkinter


【解决方案1】:

它不起作用的原因是因为您破坏了按钮并且不再创建它,但是您当前的方法有点不切实际。这是一个更直接的方法:

import tkinter as tk

window = tk.Tk()
passwordShown = False

def passToggle():
    global passwordShown
    if passwordShown: #If the password is being shown, hide it
        passwordShown = False
        PasswordEntry.config(show = "*")
        ShowPasswordButton.config(text = "Show Password")
    else: #If the password is not visible, show it
        passwordShown = True
        PasswordEntry.config(show = "")
        ShowPasswordButton.config(text = "Hide Password")

PasswordEntry = tk.Entry(window, show = "*", font = 2)
PasswordEntry.pack()
ShowPasswordButton = tk.Button(window, height = 1, width = 12, text = "Show Password", command = passToggle)
ShowPasswordButton.pack()

这使用一个功能来显示/隐藏密码并更改按钮的内容。它不使用画布,因为它没有必要。相反,它使用了一个名为pack 的几何管理器(告诉Tkinter 把东西放在哪里)。这只是将小部件(按钮、标签等)放在前一个之下。还有另外两个几何管理器,gridplacegrid 将项目排列在网格中,place 将小部件放置在您指定的坐标处。
现在有一个条目和一个按钮。单击按钮时,通过passToggle 函数更改条目和按钮。 passwordShown 变量跟踪密码是否显示。如果显示密码,passwordShown 将设置为 False,因此下次按下按钮时会发生相反的情况。然后使用.config 方法更改条目以显示字母“*”并将按钮文本更改为“显示密码”。如果passwordShown 为 False,则相反。

【讨论】:

  • 你可以使用passwordShown而不是PasswordEntry.cget("show") != "*"
  • 这是个好主意,但它的可读性稍差。
  • 是的。我也只会使用一个变量,但是 stackoverflow 上的一些人真的很讨厌全局变量。我不知道 OP 是否喜欢它们,所以我把它放在 cmets 中:D
  • 非常感谢您的帮助,现在使用您的方法使其正常工作,谢谢。
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2015-12-26
  • 2017-09-09
  • 2018-09-03
  • 2020-09-23
  • 1970-01-01
相关资源
最近更新 更多