Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tkinter中,如何将字符串转换为整数,从而生成一个随机密码生成器_Python_Tkinter - Fatal编程技术网

Python 在Tkinter中,如何将字符串转换为整数,从而生成一个随机密码生成器

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"

我想,我正在尝试创建一个GUI,它在其中创建一个随机密码。输入框中键入的数字将决定密码的位数。示例:数字12将是12位密码。我在将数字转换为整数值时遇到了问题,我可以将其用于随机密码函数。“生成”函数不能生成随机密码,我不知道为什么

这是密码

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。通常,一个随机密码生成器一次显示一个密码,但如果这不是您想要的,您可以制作更多的标签。