pillowを使ってtkinterでQRコードの再現
■tkinterのラベルでの再現をpillowを使って行う。
前に、QRコードをtkinterのラベルで再現した際には、tkinterのラベルをクリックすることで色を変えれるようにして手動でQRコードと同じようにしていった。そこそこ手間がかかるので、画像操作のパッケージpillowを使って自動的に出せるようにする。
最終的なコードは下のもの。
import tkinter as ttk
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=4,
border=1,
)
qr.add_data('sample038_QRcode to tkinter sample code')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
xsize, ysize = img.size
ROW = int(xsize / 4)
COLUMN = int(ysize / 4)
print("ROW:" + str(ROW))
print("COLUMN:" + str(COLUMN))
class Function(ttk.Tk):
def __init__(self):
super().__init__()
self.geometry("360x360")
self.base_frame = ttk.Frame(self, pady=0, padx=0)
self.base_frame.pack(side='top')
for i in range(0, COLUMN):
for j in range(0, ROW):
part = img.crop(((i * 4), (j * 4), (i * 4 + 4), (j * 4 + 4)))
info = part.getcolors()
if info[0][1] == 255:
backcolor = "white"
elif info[0][1] == 0:
backcolor = "black"
self.widgt1 = ttk.Label(self.base_frame, background=backcolor, width=2, font=("Arial", 2))
self.widgt1.grid(column=i, row=j, padx=0, pady=0)
if __name__ == "__main__":
func1 = Function()
func1.mainloop()
上のコードでは、QRコードをqrcodeパッケージで作る。その画像ファイルをpillowパッケージの crop と getcolors で各ラベル用の色を取得する。色の情報からtkinterのラベルの背景色を指定してフレームに入れていく。
結果が下のもの。
とりあえず今回はここまで。ここからどう発展させようか。