Python 即使您写了一些东西,变量也是空的

Python 即使您写了一些东西,变量也是空的,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,当我尝试生成密码时,即使输入长度,Python也会说变量lengthtstr为空 这是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/Pytho

当我尝试生成密码时,即使输入长度,Python也会说变量
lengthtstr
为空

这是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: ''

出现此错误的原因可能是您没有在
Entry()
中输入任何内容。要避免此错误,请使用
尝试
除外

这将是按钮的创建:

试试看:
generatebutton=tk.按钮(窗口,text=“generas”,font=(“Helvetica”,12,“bold”),bg=“#007acc”,activebackground=“#66c2ff”,command=lambda:generate(int(lengthstr)))
除了(ValueError,NameError):
通过
generatebutton.config(relief=“flat”)
generatebutton.grid(行=4,列=0,pady=6,ipady=1,ipadx=240)

出现此错误的原因可能是因为您没有在
条目()中输入任何内容。要避免此错误,请使用
尝试
除外

这将是按钮的创建:

试试看:
generatebutton=tk.按钮(窗口,text=“generas”,font=(“Helvetica”,12,“bold”),bg=“#007acc”,activebackground=“#66c2ff”,command=lambda:generate(int(lengthstr)))
除了(ValueError,NameError):
通过
generatebutton.config(relief=“flat”)
generatebutton.grid(行=4,列=0,pady=6,ipady=1,ipadx=240)

为避免此错误,您只需在用户输入文本时调用
.get()
;为此,我建议使用按钮:

def getTextFromEntry(入口):
全球长度
lengthtstr=length.get()
打印(长度STR)
def generatepassword():
generatefunction.destroy()
seepassbutton.destroy()
text.destroy()
textgen=“通用una密码”
textgen=tk.Label(窗口,text=textgen,fg=“#333”,font=(“Helvetica”,32,“粗体”))
textgen.grid(行=0,列=0,sticky=“N”)
长度=tk.条目(窗口,justify=“center”)
网格长度(行=2,列=0,pady=10,ipadx=42)
getValue=按钮(text=“生成密码”,command=getTextFromEntry)
getValue.pack()
textgen=“Inserisci la lunghezza della密码”
textgen=tk.Label(窗口,text=textgen,fg=“#333”,font=(“Helvetica”,10))
textgen.grid(行=3,列=0,sticky=“N”)
generatebutton=tk.按钮(窗口,text=“generas”,font=(“Helvetica”,12,“bold”),bg=“#007acc”,activebackground=“#66c2ff”,command=lambda:generate(int(lengthstr)))
generatebutton.config(relief=“flat”)
generatebutton.grid(行=4,列=0,pady=6,ipady=1,ipadx=240)
(我确信使用
lambda
s有一种更简单的方法,但这是我能做的最好的方法;)


您还可以尝试使用
try
语句(如@10Rep的答案,但在循环中获取值(
.get()
)和转换为
int
),并在成功时停止循环。

要避免此错误,需要调用
.get()
仅当用户在文本中输入时;为此,我建议使用按钮:

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")
def getTextFromEntry(入口):
全球长度
lengthtstr=length.get()
打印(长度STR)
def generatepassword():
generatefunction.destroy()
seepassbutton.destroy()
text.destroy()
textgen=“通用una密码”
textgen=tk.Label(窗口,text=textgen,fg=“#333”,font=(“Helvetica”,32,“粗体”))
textgen.grid(行=0,列=0,sticky=“N”)
长度=tk.条目(窗口,justify=“center”)
网格长度(行=2,列=0,pady=10,ipadx=42)
getValue=按钮(text=“生成密码”,command=getTextFromEntry)
getValue.pack()
textgen=“Inserisci la lunghezza della密码”
textgen=tk.Label(窗口,text=textgen,fg=“#333”,font=(“Helvetica”,10))
textgen.grid(行=3,列=0,sticky=“N”)
generatebutton=tk.按钮(窗口,text=“generas”,font=(“Helvetica”,12,“bold”),bg=“#007acc”,activebackground=“#66c2ff”,command=lambda:generate(int(lengthstr)))
generatebutton.config(relief=“flat”)
generatebutton.grid(行=4,列=0,pady=6,ipady=1,ipadx=240)
(我确信使用
lambda
s有一种更简单的方法,但这是我能做的最好的方法;)

您还可以尝试在循环中使用
try
except
语句(如@10Rep的答案,但需要获取值(
.get()
)和转换为
int
),并在成功时停止循环

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”,则必须先转换为浮点,然后再转换为int,如下所示:

 generatebutton = tk.Button(window, ..., command=lambda:generate(int(float(lengthstr)))
编辑: 我找到了您的
lengthstr
变量,在执行此操作时
lengthstr=length.get()
条目将是
'
,它是一个空字符串,无法转换为整数

lengthstr=length.get()
移动到generate函数中,这样,用户单击按钮后,您的按钮只会获得输入字段,然后您就可以转换为int

删除函数参数,然后在命令中调用函数

但错误来自于对按钮的命令

generatebutton = tk.Button(window, ...., command=lambda: generate(int(lengthstr)))
您试图将无效文字转换为int,lengthstr的值是多少?如果它是浮点文字,例如“1.5”,则必须先转换为浮点,然后再转换为int,如下所示:

 generatebutton = tk.Button(window, ..., command=lambda:generate(int(float(lengthstr)))
编辑: 我找到了您的
lengthstr
变量,在执行此操作时
lengthstr=length.get()
条目将是
'
,它是一个空字符串,无法转换为整数

lengthstr=length.get()
移动到generate函数中,这样,用户单击按钮后,您的按钮只会获得输入字段,然后您就可以转换为int

删除函数参数,然后在命令中调用函数。

Please vi