AttributeError: 'StringVar' 对象没有属性 'encode' [英] AttributeError: 'StringVar' object has no attribute 'encode'

查看:24
本文介绍了AttributeError: 'StringVar' 对象没有属性 'encode'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个程序,根据提供的消息和密码生成加密的 qr,但它一直返回相同的错误.

I'm making a program to generate an encrypted qr from the message and password provided, but it keeps on returning the same error.

我尝试将值传递给其他变量

I tried passing the value to other variables

main.py

from tkinter import *
import crypt

root=Tk()
root.title("QR Crypt")
root.geometry("800x600+0+0")

heading = Label(root, text="QR Code Encrypt", font=("arial",54,"bold"), fg="steelblue").pack()
label1 = Label(root, text="MESSAGE: ", font=("arial",24,"bold"), fg="black").place(x=10,y=200)
label2 = Label(root, text="PASSWORD: ", font=("arial",24,"bold"), fg="black").place(x=10,y=300)
message = StringVar()
entry_box = Entry(root, textvariable=message, width=80, bg="lightgreen").place(x=280, y=210)
passwd = StringVar()
entry_box = Entry(root, textvariable=passwd, width=30, bg="lightgreen").place(x=280, y=310)

def generate_qr():
    crypt.crypt_f(passwd,message)
    canvas = Canvas(root, width = 300, height = 300)
    canvas.pack()
    img = PhotoImage(file="myqr.svg")
    canvas.create_image(20,20, anchor=NW, image=img)

work = Button(root, text="Generate", width=30, height=5, bg="lightblue", command=generate_qr).place(x=250,y= 400)

mainloop()

<小时>

crypt.py


crypt.py

import base64
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.fernet import Fernet
import qrcode

def crypt_f(password_provided,message_rcvd):
    password = password_provided.encode()
    salt = b'\x8f\x9f3\xf1V\\\n:\xa5\x87h\x9e*\xd1\xc4\xda\xa9.\x96\xfc/\xa9\xb4\x0e\xc8wD\x9d\xee\xeb\xb1E'
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
)
    key = base64.urlsafe_b64encode(kdf.derive(password))

    f = Fernet(key)
    encrypted = f.encrypt(message_rcvd)
    qrcode.qr_ready(encrypted)

<小时>

二维码.py


qrcode.py

from pyqrcode import *

def qr_ready(qr_rcvd):
    toqr=qr_rcvd
    qrcode = create(toqr)
    qrcode.svg("myqr.svg",scale=10)

我希望它返回另一个画布中的二维码,但它返回错误:

I expect it to return the QR code in another canvas but it is returning the error:

AttributeError: 'StringVar' 对象没有属性 'encode'

AttributeError: 'StringVar' object has no attribute 'encode'

推荐答案

main.py

from tkinter import *
import crypt
from PIL import ImageTk,Image
import time

root=Tk()
root.title("QR Crypt")
root.geometry("800x600+0+0")

heading = Label(root, text="QR Code Encrypt", font=("arial",54,"bold"), fg="steelblue").pack()
label1 = Label(root, text="MESSAGE: ", font=("arial",24,"bold"), fg="black").place(x=10,y=200)
label2 = Label(root, text="PASSWORD: ", font=("arial",24,"bold"), fg="black").place(x=10,y=300)
message = StringVar()
passwd = StringVar()
entry_box1 = Entry(root, textvariable=message, width=80, bg="lightgreen").place(x=280, y=210)
entry_box2 = Entry(root, textvariable=passwd, width=30, bg="lightgreen").place(x=280, y=310)

def generate_qr():
    crypt.crypt_f(passwd.get(), message.get())
    time.sleep(2)
    canvas = Canvas(root, width = 650, height = 650)
    canvas.pack()
    img = ImageTk.PhotoImage(Image.open("myqr.png"))
    canvas.create_image(20,20, anchor=NW, image=img)


work = Button(root, text="Generate", width=30, height=5, bg="lightblue", command=generate_qr).place(x=250,y= 400)

mainloop()

二维码.py

from pyqrcode import *

def qr_ready(qr_rcvd):
    toqr=qr_rcvd
    qrcode = create(toqr)
    qrcode.png("myqr.png",scale=10)

crypt.py

import base64
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.fernet import Fernet
import qrcode

def crypt_f(password_provided,message_rcvd):
    password = password_provided.encode()
    messge = message_rcvd.encode()
    salt = b'\x8f\x9f3\xf1V\\\n:\xa5\x87h\x9e*\xd1\xc4\xda\xa9.\x96\xfc/\xa9\xb4\x0e\xc8wD\x9d\xee\xeb\xb1E'
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
)
    key = base64.urlsafe_b64encode(kdf.derive(password))

    f = Fernet(key)
    encrypted = f.encrypt(messge)
    qrcode.qr_ready(encrypted)

这篇关于AttributeError: 'StringVar' 对象没有属性 'encode'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆