我尝试使用 Python 从用户的输入文件制作二维码,但它不起作用
I tried to make a QRcode from the user's input file with Python but its not working
这是我的代码:
import qrcode
from tkinter import *
from tkinter import filedialog
root=Tk()
def choosefile():
global file
file=filedialog.askopenfile(mode='r',title='Choose a File')
choosefilebutton=Button(root,text='Choose a File',command=choosefile)
choosefilebutton.pack()
def submit():
qr=qrcode.make(file)
qr.save('qrcode.png')
choosefilebutton=Button(root,text='Submit',command=submit)
choosefilebutton.pack()
root.mainloop()
它制作了一个二维码,但是当我扫描二维码时,结果是:
<_io.TextIOWrapper name='/Users/charliezhang/Desktop/hello.png' mode='r' encoding='UTF-8'>
我是 Python 的新手,还不太了解所有内容
有人可以帮忙吗?
你只得到一个文件路径和名称数据askopenfile
。
应该是这样的:
f = open(file.name)
qr = qrcode.make(f.read())
f.close()
在 Py 3.8.10 中,以下工作:
def submit():
if file:
qr = qrcode.make(file.read())
qr.save('qrcode.png')
这里,从filedialog.askopenfile()
返回的file
不是一个字符串,而是一个类似文件的对象。因此,添加 .read()
将从文件中提取数据。 filedialog.askopenfilename()
方法 returns 一个字符串,它是文件的名称。
我还添加了文件检查,因为如果用户从“打开文件”对话框中点击“取消”按钮,file
将设置为 None。因此,执行此检查有助于防止用户随后点击“提交”按钮时出现另一个错误。
这是我的代码:
import qrcode
from tkinter import *
from tkinter import filedialog
root=Tk()
def choosefile():
global file
file=filedialog.askopenfile(mode='r',title='Choose a File')
choosefilebutton=Button(root,text='Choose a File',command=choosefile)
choosefilebutton.pack()
def submit():
qr=qrcode.make(file)
qr.save('qrcode.png')
choosefilebutton=Button(root,text='Submit',command=submit)
choosefilebutton.pack()
root.mainloop()
它制作了一个二维码,但是当我扫描二维码时,结果是:
<_io.TextIOWrapper name='/Users/charliezhang/Desktop/hello.png' mode='r' encoding='UTF-8'>
我是 Python 的新手,还不太了解所有内容 有人可以帮忙吗?
你只得到一个文件路径和名称数据askopenfile
。
应该是这样的:
f = open(file.name)
qr = qrcode.make(f.read())
f.close()
在 Py 3.8.10 中,以下工作:
def submit():
if file:
qr = qrcode.make(file.read())
qr.save('qrcode.png')
这里,从filedialog.askopenfile()
返回的file
不是一个字符串,而是一个类似文件的对象。因此,添加 .read()
将从文件中提取数据。 filedialog.askopenfilename()
方法 returns 一个字符串,它是文件的名称。
我还添加了文件检查,因为如果用户从“打开文件”对话框中点击“取消”按钮,file
将设置为 None。因此,执行此检查有助于防止用户随后点击“提交”按钮时出现另一个错误。