AttributeError: 'StringVar' object has no attribute 'encode'
AttributeError: 'StringVar' object has no attribute 'encode'
我正在制作一个程序,根据提供的消息和密码生成加密的二维码,但它一直return出现同样的错误。
我尝试将值传递给其他变量
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
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)
qrcode.py
from pyqrcode import *
def qr_ready(qr_rcvd):
toqr=qr_rcvd
qrcode = create(toqr)
qrcode.svg("myqr.svg",scale=10)
我希望它 return 另一个 canvas 中的 QR 码,但它是 return 错误:
AttributeError: 'StringVar' object has no attribute 'encode'
StringVar 是自定义 class,不是字符串。使用 get 方法将其值检索为字符串,如:
crypt.crypt_f(passwd.get(), message.get())
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()
qrcode.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)
我正在制作一个程序,根据提供的消息和密码生成加密的二维码,但它一直return出现同样的错误。
我尝试将值传递给其他变量
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
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)
qrcode.py
from pyqrcode import *
def qr_ready(qr_rcvd):
toqr=qr_rcvd
qrcode = create(toqr)
qrcode.svg("myqr.svg",scale=10)
我希望它 return 另一个 canvas 中的 QR 码,但它是 return 错误:
AttributeError: 'StringVar' object has no attribute 'encode'
StringVar 是自定义 class,不是字符串。使用 get 方法将其值检索为字符串,如:
crypt.crypt_f(passwd.get(), message.get())
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()
qrcode.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)