Tkinter 私の実績 A4(完)
前回に続き、QRコードを生成・表示する関数を追加して完了です。
記事の最後にソースコードを添付します。
前回との相違点
1.pyqrcode をインポート
環境によっては以下のようにインポートが必要です。
(Raspberry Pi の LXTerminal から)
pip3 install pyqrcode
pip3 install pypng
2.表示文字列の変更と追加
3.QRコードを生成・表示する関数を追加
差分ソース
def __init__(self,master): に追加・修正した分
self.msg2 = u'コードを生成・表示しました。\nフォルダー「OUTPUT」に\n .png ファイルを保存済です。\nご利用下さい。'
self.msg1 = u'スケールを選択し、文字列を\n入力して、<Enter> または、\n生成ボタンを押下して下さい。\n QRコードを生成します。'
#self.msg1 = u'スケールを選択し、文字列を\n入力して、<Enter> または、\n生成ボタンを押下して下さい。\n まだ何も起こりません。'
self.msg1 の末尾を「まだ何も起こりません。」から「QRコードを生成します。」に変更
QRコード生成後の表示 self.msg2 を追加
def makeqr(self): に追加・修正した分
def makeqr(self): # self.button1 または makeqre から呼び出し
self.msg.set(self.msg2) # 表示文字列を指定
scl = int(self.variable.get()) # プルダウンメニューの値を取得
strs = self.box1.get() # 入力文字列を取得
fname = strs
fname = fname.replace('https://','') # ファイル名に適さない文字列を置き換え
fname = fname.replace('http://','')
fname = fname.replace(':','_')
fname = fname.replace('/','_')
fname = fname.replace('.','_')
fname = fname.replace(',','_')
fname = fname.replace(' ','_')
if len(fname) > 20: # .png ファイル名(略称)を作成
fname = fname[:20]
pngn = './OUTPUT/' + fname + '.png'
a = pyqrcode.create(content=strs, error='H') # QRコードイメージを作成
a.png(file=pngn,scale=scl) # .png ファイルを保存
self.canvasq.delete("all") # self.canvasq の表示を全消去
self.fig2 = tk.PhotoImage(file=pngn) # canvasq に表示
self.canvasq.create_image(90, 90, image=self.fig2, anchor=tk.CENTER)
コメントに書いた通りですが、QRコード生成後のメッセージを指定(表示)した後で次の処理をします。
1.入力文字列、スケールの選択値を取得
2.QRコード・イメージファイルのファイル名に適さない文字を置換
3.2.の文字列の先頭20文字までを取得
4.1.からQRコードを生成し、3.のファイル名で保存
5.イメージ表示エリア(self.canvasq)の表示をクリア
6.イメージ表示エリアに4.のイメージを表示
以上で完了です。
Windows での表示
下図は、同じソースをWindowsで実行した結果です。
動作は問題なさそうですが、文字やウィジェットの配置が微妙にズレています。
他のOS等で使う場合は、微調整が必要そうです。
ソースコード
以下はWindows 環境で作ったZipファイルで、内容は以下の通りです。
SP003_main.py プログラム
Tk_mag.png 起動時に表示するQRコード・イメージ
uPyC.png uPyC ロゴ
./OUTPUT/keep_folder.txt OUTPUTフォルダー
おまけ
Pyinstaller で EXE化したWindows版です。
Windows 用にウィジェットのサイズなどを調整し、Windows 10 で動作確認しました。
解凍して出来たフォルダーの SP003_main4win.exe をダブルクリックして起動します。
お役に立てたなら、コメント、サポート、スキを頂けると励みなります。
宜しくお願いします。
いいなと思ったら応援しよう!
出来ればサポート頂けると、嬉しいです。
新しい基板や造形品を作る資金等に使いたいと思います。