我尝试使用 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。因此,执行此检查有助于防止用户随后点击“提交”按钮时出现另一个错误。