Python 在Tkinter中,如何将字符串转换为整数,从而生成一个随机密码生成器
我想,我正在尝试创建一个GUI,它在其中创建一个随机密码。输入框中键入的数字将决定密码的位数。示例:数字12将是12位密码。我在将数字转换为整数值时遇到了问题,我可以将其用于随机密码函数。“生成”函数不能生成随机密码,我不知道为什么 这是密码Python 在Tkinter中,如何将字符串转换为整数,从而生成一个随机密码生成器,python,tkinter,Python,Tkinter,我想,我正在尝试创建一个GUI,它在其中创建一个随机密码。输入框中键入的数字将决定密码的位数。示例:数字12将是12位密码。我在将数字转换为整数值时遇到了问题,我可以将其用于随机密码函数。“生成”函数不能生成随机密码,我不知道为什么 这是密码 import random import string import tkinter root = tkinter.Tk() root.title('Random Password generator') root.geometry("200x200"
import random
import string
import tkinter
root = tkinter.Tk()
root.title('Random Password generator')
root.geometry("200x200")
def generatepassword():
password =''
for a in range(num):
a = random.randint(1, 50)
password += string.printable[a]
return password
def generate():
new_number = Entry1.get()
generate_text = tkinter.Label(root, text="Password is: " + generatepassword(new_number))
generate_text.pack()
Message = tkinter.Label(root, text="Enter an number:").pack()
Entry1 = tkinter.Entry(root, font="calibra")
Entry1.pack()
Button = tkinter.Button(root, height=1, width=6, text='Submit', command=generate).pack()
root.mainloop()
get()方法将始终返回字符串。如果要将其用作整数或浮点,则需要在执行此操作之前对其进行强制转换。
内置功能是您的选择之一
new_number = int(Entry1.get())
因为get()
总是从输入字段返回字符串,所以在使用int()
时,需要有一些方法来使用该值,即该值实际上是一个整数。快速简便的方法是使用try/except
语句。也就是说,我会改变一些事情
第一。这里不需要2个函数。一切都可以在一个函数中完成
第二。更新了您的代码,使其更接近PEP8
三,。添加了一个focus()
和bind()
,使其更易于使用
第四。移动了要在全局命名空间中创建的密码的标签,并对其进行了更改,以便我们只更新密码,而不是添加新行
最后,我添加了一个try/except
语句,这样,如果有人试图提交一个非int、添加缺少的参数和一个到整数的转换,我们就可以处理这种情况
请参阅下面的代码,如果您有任何问题,请告诉我
import tkinter as tk
import random
import string
def generate_password():
try:
password = ''
for _ in range(int(entry1.get())):
a = random.randint(1, 50)
password = '{}{}'.format(password, string.printable[a])
generate_text.config(text="Password is: {}".format(password))
except BaseException as e:
print('{}'.format(e))
root = tk.Tk()
root.title('Random Password generator')
root.geometry("200x200")
message = tk.Label(root, text="Enter an number:")
entry1 = tk.Entry(root, font="calibra")
button = tk.Button(root, height=1, width=6, text='Submit', command=generate_password)
generate_text = tk.Label(root, text="")
message.pack()
entry1.pack()
button.pack()
generate_text.pack()
entry1.focus()
entry1.bind('<Return>', generate_password)
root.mainloop()
将tkinter作为tk导入
随机输入
导入字符串
def生成_密码():
尝试:
密码=“”
对于范围内的(int(entry1.get()):
a=random.randint(1,50)
密码=“{}{}”。格式(密码,字符串。可打印[a])
generate_text.config(text=“Password is:{}”.format(Password))
除BaseException作为e外:
打印(“{}.”格式(e))
root=tk.tk()
root.title('随机密码生成器')
根几何(“200x200”)
message=tk.Label(root,text=“输入数字:”)
entry1=tk.Entry(root,font=“calibra”)
button=tk.button(根,高度=1,宽度=6,text='Submit',命令=generate\u密码)
生成_text=tk.Label(根,text=”“)
message.pack()
entry1.pack()
button.pack()
生成_text.pack()
entry1.focus()
entry1.bind(“”,生成\u密码)
root.mainloop()
使用IntVar()
直接接受整数
因为你需要一个全数字密码,所以这个代码就是这样做的
代码:
import random
import string
import tkinter as tk
root = tk.Tk()
root.title('Random Password generator')
message = tk.Label(root, text="Enter an number:")
message.pack()
# take an integer input rather than a string
number = tk.IntVar()
entry1 = tk.Entry(root, font="calibra", textvariable=number)
entry1.pack()
def generatepassword(number):
password = ''
for i in range(number):
# randint is inclusive at both ends
digit = random.randint(0, 9)
password += str(digit)
return password
generate_text = tk.Label(root)
generate_text.pack()
def generate():
pwd_len = number.get()
password = generatepassword(pwd_len)
generate_text.config(text="Password is: " + password)
button = tk.Button(root, height=1, width=6, text='Submit', command=generate)
button.pack()
root.mainloop()
注意:IntVar()
的默认值为0
,您可以输入任何数字代替0
,并输入密码
输出:
import random
import string
import tkinter as tk
root = tk.Tk()
root.title('Random Password generator')
message = tk.Label(root, text="Enter an number:")
message.pack()
# take an integer input rather than a string
number = tk.IntVar()
entry1 = tk.Entry(root, font="calibra", textvariable=number)
entry1.pack()
def generatepassword(number):
password = ''
for i in range(number):
# randint is inclusive at both ends
digit = random.randint(0, 9)
password += str(digit)
return password
generate_text = tk.Label(root)
generate_text.pack()
def generate():
pwd_len = number.get()
password = generatepassword(pwd_len)
generate_text.config(text="Password is: " + password)
button = tk.Button(root, height=1, width=6, text='Submit', command=generate)
button.pack()
root.mainloop()
此外,如果您想要同时包含字母(大写和小写)和数字的密码,请将generatepassword()
函数替换为以下版本:
def generatepassword(number):
password = ''
for i in range(number):
password += random.choice(string.ascii_letters + string.digits)
return password
您的问题并显示您面临的完整回溯。简单的选项是:
try:int(string)except:print('string不是int')
。generate_text.config(text=“Password is:{}”。format(Password))。对于这一行代码,为什么我们不能创建另一个这样类型的标签呢。generate_text=tk.Label(root,text=“Password is:{}”).format(Password))@LittleEggman如果您想创建更多标签,那么您可以,但如果您只想更新标签,我们使用config。通常,一个随机密码生成器一次显示一个密码,但如果这不是您想要的,您可以制作更多的标签。