在使用三引号时容易犯的小错误详解编程语言

请看如下代码,执行后,思考生成的两个二维码为什么不一样?

 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

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论