TkinterでQRコードメーカーを作ってみた!


プログラミングの勉強の為に、とにかく何か成果物を作りたい!と思い、pythonのTkinterでQRコードメーカーを作ってみました。

qrcode.py
import tkinter
from PIL import Image,ImageTk
import qrcode

url = ''
img = imgtk = None

def click_btn():
    global url,img
    url = entry.get()
    img = qrcode.make(url)
    draw_code()

def draw_code():
    global imgtk #PhotoImage()はグローバル変数に入れないとすぐ消滅し、画像が表示されない
    canvas.delete('QRCODE')
    imgtk = ImageTk.PhotoImage(img) 
    canvas.create_image(
        300,
        300,
        image=imgtk,
        tag='QRCODE'
        )


root = tkinter.Tk()
canvas = tkinter.Canvas(width=600,height=500,bg='white')
canvas.pack()
root.title('QRcode maker')
entry = tkinter.Entry(width=60)
entry.place(x=20,y=70)
label = tkinter.Label(root,text='QRコード化したいURLを入力',font=('System',24))
label.place(x=20,y=20)
button = tkinter.Button(root,text='QRコード作成!',font=('Times New Roman',24),command=cli    ck_btn)
button.place(x=20,y=100)
root.mainloop()

↓実行

◎詰まったこと

・エラーメッセージが出ないのに、QRコードがcreate_imageで表示されなかった。
・qrcodeモジュールのimg.saveで保存すると、qrコードは生成されており、保存出来た。
→QRコードが一瞬だけ表示されて、すぐ消えたのかと思い、root.after()とか使ってみたけど、効果なし。

色々調べた結果、グローバル関数でPhotoImageオブジェクトを保管しないと、オブジェクト?がすぐ消えてしまうようです。
参考url→http://lrcgf.hatenablog.com/entry/2013/06/30/222918

QRコードのイメージを作成したものの、create_imageにきちんとデータを渡せていなかったようです。
勉強になりました。