请看如下代码,执行后,思考生成的两个二维码为什么不一样?
1 # -*- coding:utf-8 -*- 2 from tkinter import * 3 from tkinter import ttk 4 from PIL import ImageTk 5 import qrcode 6 class QRcodeImage(object): 7 '''生成二维码图片类''' 8 9 def __init__(self, content, fcolor=None, bcolor=None, size=None): 10 ''' 11 参数说明: 12 content:二维码图片的文本内容 13 fcolor:二维码图片的前景色 14 bcolor:二维码图片的背景色 15 size:二维码大小 16 ''' 17 qr = qrcode.QRCode(version=2, 18 error_correction=qrcode.constants.ERROR_CORRECT_L, #容错率 19 box_size=8, 20 border=2) # 实例化QRCode类,得到qr对象 21 qr.add_data(content) # 二维码内容添加到图片中 22 qr.make(fit=True) # 图片中的二维码大小自适应,以保证二维码内容能完整绘制 23 if fcolor == None: fcolor = 'black' #默认前景色为黑色 24 if bcolor == None:bcolor = 'white' #默认背景色为白色 25 img = qr.make_image(fill_color=fcolor, 26 back_color=bcolor) #生成彩色二维码图片 27 img = img.convert(mode="RGBA") # 将图片的模式转换为彩色透明模式 28 if size == None: size = 150 #默认图片大小 29 self.img = img.resize((size, size)) 30 31 def getPhotoImage(self): 32 '''转换为PhotoImage''' 33 tkimg = ImageTk.PhotoImage(self.img) 34 return tkimg 35 def cvfill(): 36 cv.create_window(200, 50, window=lbimg1, width=155, height=155, 37 anchor=NW, 38 ) 39 cv.create_window(50, 50, window=lbimg2, width=155, height=155, 40 anchor=NW, 41 ) 42 global img1 43 img1 = QRcodeImage(content).getPhotoImage() 44 lbimg1.config(image=img1) 45 content1='''BEGIN:VCARD 46 FN:steven 47 TITLE:Drector 48 TEL;TYPE=CELL:15201011234 49 NOTE: 50 END:VCARD ''' 51 global img2 52 img2=QRcodeImage(content1).getPhotoImage() 53 lbimg2.config(image=img2) 54 root = Tk() 55 56 57 cv = Canvas(root, width='94m', height='54m', bg='#F0F8FF', 58 highlightbackground='gold', 59 highlightthickness=2, 60 ) 61 cv.pack(pady=10) 62 63 lbimg1 = Label() 64 lbimg2 = Label() 65 content='''BEGIN:VCARD 66 FN:steven 67 TITLE:Drector 68 TEL;TYPE=CELL:15201011234 69 NOTE: 70 END:VCARD ''' 71 cvfill() 72 mainloop()
执行上述代码,结果如下图所示:
明显两个二维码图片不同,而出现这样的差异的原因就出现在全局变量content和局部变量content1的赋值上。
content的赋值后的结果为:
content = BEGIN:VCARD/nFN:steven/nTITLE:Drector/nTEL;TYPE=CELL:15201011234/nNOTE:/nEND:VCARD
而content1的赋值后的结果为:
content1 = BEGIN:VCARD/n FN:steven/n TITLE:Drector/n TEL;TYPE=CELL:15201011234/n NOTE:/n END:VCARD
明显content和content1的值的内容不一样,content1多了很多空格字符。造成这样结果的原因就是因为在函数cvfill()中,三引号”’中的内容从第二行开始进行了缩进,导致增加了很多缩进的空格,这是很容易犯的一个小错误,并且不易被注意到。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19729.html