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のラベルの背景色を指定してフレームに入れていく。

結果が下のもの。


とりあえず今回はここまで。ここからどう発展させようか。