首页 > 解决方案 > 即使你写了一些东西,变量也是空的

问题描述

当我尝试生成密码时,即使您输入长度 Python 表示该变量lengthstr为空。

这是 Python 给我的错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/home/salvatore/Python Projects/Password Saver/Ps.py", line 35, in <lambda>
    generatebutton = tk.Button(window, text="Genera", font=("Helvetica", 12, "bold"), bg="#007acc", activebackground="#66c2ff", command=lambda: generate(int(lengthstr)))
ValueError: invalid literal for int() with base 10: ''

这是我的代码:

def generate(length):
    return length
    chars = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&£*()?"
    passgen = "".join(choice(chars) for x in range(length))
    passwd = tk.Entry(window)
    passwd.insert(0, passgen)
    passwd.grid(row=5, column=0, sticky="N")

def generatepassword():
    generatefunction.destroy()
    seepassbutton.destroy()
    text.destroy()

    textgen = "Genera una Password"
    textgen = tk.Label(window, text=textgen, fg="#333333", font=("Helvetica", 32, "bold"))
    textgen.grid(row=0, column=0, sticky="N")

    length = tk.Entry(window, justify="center")
    length.grid(row=2, column=0, pady=10, ipadx=42)
    lengthstr = length.get()
    print(lengthstr)

    textgen = "Inserisci la lunghezza della Password"
    textgen = tk.Label(window, text=textgen, fg="#333333", font=("Helvetica", 10))
    textgen.grid(row=3, column=0, sticky="N")

    generatebutton = tk.Button(window, text="Genera", font=("Helvetica", 12, "bold"), bg="#007acc", activebackground="#66c2ff", command=lambda: generate(int(lengthstr)))
    generatebutton.config(relief="flat")
    generatebutton.grid(row=4, column=0, pady=6, ipady=1, ipadx=240)

标签: pythonpython-3.xtkinter

解决方案


def generate(length):
    #This `return length` won't let your logic in this function run
    return length
    chars = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&£*()?"
    passgen = "".join(choice(chars) for x in range(length))
    passwd = tk.Entry(window)
    passwd.insert(0, passgen)
    passwd.grid(row=5, column=0, sticky="N")

但错误来自您的按钮命令

generatebutton = tk.Button(window, ...., command=lambda: generate(int(lengthstr)))

您正在尝试将无效文字转换为 int,lengthstr 的值是多少?如果它是一个浮点文字,例如 '1.5' 你必须先转换为浮点数,然后再转换为整数,如下所示:

 generatebutton = tk.Button(window, ..., command=lambda:generate(int(float(lengthstr)))

编辑:

我找到了您的lengthstr变量,在您执行此操作时,lengthstr = length.get()该条目将''是一个空字符串,无法转换为 Int..

进入generatelengthstr = length.get()函数,这样您的 Button 仅在用户单击按钮后才获取 Entry 字段,然后您可以转换为 int..

去掉函数参数,然后在命令中,调用函数即可。


推荐阅读