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

时间:2018-02-03 18:13:27

标签: python 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个字符时:

screenshot

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

screenshot2

3 个答案:

答案 0 :(得分:0)

改变两件事: 第一:

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)

答案 1 :(得分:0)

首先,将您的gen方法定义移至import以下,以便在主体中识别它们。然后从方法中取出您的小部件和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()

答案 2 :(得分:0)

  

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

以下是在按下label时清除button文字的示例:

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except ImportError:
    import Tkinter as tk


def clear_widget_text(widget):
    widget['text'] = ""


if __name__ == '__main__':
    root = tk.Tk()
    label = tk.Label(root, text="This will be cleared.")
    button = tk.Button(root, text="Clear",
                                    command=lambda : clear_widget_text(label))
    label.pack()
    button.pack()
    root.mainloop()

以下是按下label时销毁button的示例:

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except ImportError:
    import Tkinter as tk


def clear_widget(widget):
    widget.destroy()


if __name__ == '__main__':
    root = tk.Tk()
    label = tk.Label(root, text="This will be cleared.")
    button = tk.Button(root, text="Clear",
                                    command=lambda : clear_widget(label))
    label.pack()
    button.pack()
    root.mainloop()