按下按钮时如何使用 tkinter 清除标签?

新手上路,请多包涵

我在我的 tkinter 密码生成器程序中使用标签来显示生成的密码,但是当我将密码的长度从比以前更低的值更改时(例如从 20 到 10 的长度),显示密码的标签似乎是覆盖 - 不清楚。我已经搜索了执行此操作的方法,但似乎找不到任何方法。

这是我的代码:

 from tkinter import *
from random import *
import string

root = Tk()
root.wm_title("Password Generator")
topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack(side=BOTTOM)
root.geometry("1000x1000")

title = Label(topFrame, text="Length", fg="blue")
title.grid(row=3,column=5)

var = DoubleVar()
Slider_1 = Scale(root,orient=HORIZONTAL,length=32*10,from_=0,to=32, variable
= var)
Slider_1.pack()
passLen = var.get()

uppercaseLetters = "QWERTYUIOPASDFGHJKLZXCVBNM"
lowercaseLetters = "qwertyuiopasdfghjklzxcvbnm"
symbols = "!£$%^&*()_+-=}{][~@#':;?>/.<,"
digits = "1234567890"

def gen():
    characters = uppercaseLetters + lowercaseLetters + symbols + digits
    password = "".join(choice(characters) for x in range(int(var.get())))
    passLabel = Label(topFrame, text=password)
    passLabel.grid(row=4, column=5)

    genButton = Button(topFrame, text="Generate Password", fg="blue",
    command=gen)
    genButton.grid(row=1, column=5)

    root.mainloop()

当我将长度设置为 32 个字符时:

截屏

当我将长度设置为 6 个字符时,它不会清除旧密码标签 - 它只是在旧密码标签的中间覆盖它:

截图2

原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 879
2 个回答

改变两件事:第一:

 bottomFrame = Frame(root)
bottomFrame.pack(side=BOTTOM)
passLabel = Label(topFrame)
root.geometry("1000x1000")

第二:

 def gen():
    characters = uppercaseLetters + lowercaseLetters + symbols + digits
    password = "".join(choice(characters) for x in range(int(var.get())))
    passLabel.config(text=password)
    passLabel.grid(row=4, column=5)

原文由 MegaIng 发布,翻译遵循 CC BY-SA 3.0 许可协议

首先,将您的 gen 方法定义移动到 import s 的正下方,以便它们在主体中被识别。然后把你的小部件和 mainloop 从方法中取出。只需在需要时配置 passLabel 的文本:

 def gen():
    characters = uppercaseLetters + lowercaseLetters + symbols + digits
    password = "".join(choice(characters) for x in range(int(var.get())))
    passLabel['text'] = password

已进行建议编辑的完整代码:

 from tkinter import *
from random import *
import string

def gen():
    characters = uppercaseLetters + lowercaseLetters + symbols + digits
    password = "".join(choice(characters) for x in range(int(var.get())))
    passLabel['text'] = password

root = Tk()
root.wm_title("Password Generator")
topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack(side=BOTTOM)
root.geometry("1000x1000")

title = Label(topFrame, text="Length", fg="blue")
title.grid(row=3,column=5)

var = DoubleVar()
Slider_1 = Scale(root,orient=HORIZONTAL,length=32*10,from_=0,to=32, variable
= var)
Slider_1.pack()
passLen = var.get()

uppercaseLetters = "QWERTYUIOPASDFGHJKLZXCVBNM"
lowercaseLetters = "qwertyuiopasdfghjklzxcvbnm"
symbols = "!£$%^&*()_+-=}{][~@#':;?>/.<,"
digits = "1234567890"

passLabel = Label(topFrame)
passLabel.grid(row=4, column=5)
genButton = Button(topFrame, text="Generate Password", fg="blue",
command=gen)
genButton.grid(row=1, column=5)
root.mainloop()

原文由 Nae 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题