python - 即使你写了一些东西,变量也是空的
问题描述
当我尝试生成密码时,即使您输入长度 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)
解决方案
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..
去掉函数参数,然后在命令中,调用函数即可。
推荐阅读
- mysql - 使用两个不同引擎(TokuDB 和 InnoDB)连接表时索引无法正常工作
- amazon-web-services - 使用 AWS Java SDK v2 从 AWS EKS 获取身份验证令牌
- amazon-web-services - 避免RDS实例跨地域调用
- python - 如何用for循环转置矩阵?
- c# - 动态生成 HTML div 并将数据插入数据库
- java - 使用 Java 接口时的 Kotlin 接口实现行为
- bonita - Bonitasoft - 可打印的表格
- apache-kafka - Kafka 2.3 集群中的代理的 Kafka 'replications.number'
- php - 选择下拉菜单时如何更改部分内容
- c - 编译 Linux 的执行字符集是什么?