プログラミングの勉強の為に、とにかく何か成果物を作りたい!と思い、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にきちんとデータを渡せていなかったようです。
勉強になりました。