tkinterを用いて、ボタンをクリックするとカメラで読み込んだ画像を保存するGUIを作ろうとしています。
画像のファイル名は「1.jpg, 2.jpg, ~~」のように連番で増やしたいと考えています。
またシステム実行時点で、保存先のフォルダに既に画像が存在する場合、番号が被らないよう、続きの番号から保存していきたいと考えています。
現在、この仕組みを実現できずに困っております。
下記は現状のソースコードです。
Python3
1#フォルダ内の画像の番号(最大値)を取得する関数を実行して、撮影時の画像の番号を定義。 2picture_num = max_num_get() + 1 3 4#ボタンクリック時に実行される関数を定義。 5def button_takepic_clicked(): 6 print("take a picture. Name:" + str(picture_num) + ".jpg" ) 7 cv2.imwrite(takepic_path + str(picture_num) + ".jpg", frame_cv2) 8 picture_num += 1 9 return 10#ボタン作成。 11button_takepic = tk.Button(root, text="撮影", command=button_takepic_clicked)
実行すると下記のエラーが発生します。ボタンクリック時の処理の中で、関数外で定義した変数 picure_num に代入をしているので、UnboundLocalErrorとなります。
~~(略)~~ print("take a picture. Name:" + str(picture_num) + ".jpg" ) UnboundLocalError: local variable 'picture_num' referenced before assignment
対策として、下記のような変更をして、picture_numを引数として読み込んでみましたが、するとボタン実行毎にpicture_numが初期化されてしまいます。
Python3
1#ボタン作成。 2button_takepic = tk.Button(root, text="撮影", command=lambda:button_takepic_clicked(picture_num))
コマンド実行時に引数を読み込みつつ、内部の処理が初期化されない方法はあるのでしょうか。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。