被写体の明るさ(EV)計算機を作る ④

数年前にフォトマスター検定の受験用に、VisualBasicでEV計算機を作成したことが有りました。

今回はそれをPythonで作ってみようと思います。 

まだ何も考えていませんが、考え方は同じなのでPythonでも出来るでしょう。

① 以前VBで作ったEV計算機はこれ。

ISO、絞り、シャッター速度を指定すると
どんな明るさの光景に適しているか?

などと表示してくれます。 これで暫く設定していると
いつの間にか「今日は天気だから、F=5.6、T=1/500、ISO=200」
位だね、と大体見当がつくようになります。

これが出来るようになると、カメラーのオート設定に頼らずに
自分の感性で写真の絵作りが出来るようになります(必ず!)。

 

 

 

② Python EV計算機叩き台

こんな形でどうかなと叩き台を作りました。

 

 

・明るさの変化はすべて1段づつの変化とします。
・計算した被写体の説明の枠を後で大きくします。
・dataはcodeに書き込みます(data fileの添付が不要になる)。
・EVの計算式などはこれから考えます。

 

 

 

 

 

---------------- ここまでのcode --------------------------

 

# EV計算機ver1.1py 7/8/2019

import tkinter as tk
from tkinter import StringVar

root = tk.Tk()
root.title("kumasanのEV計算機")
root.geometry("280x400")

lbl_1=tk.Label(root,text="ISO")
lbl_1.place(x=20, y=10)

lbl_2=tk.Label(root,text="絞り値")
lbl_2.place(x=100, y=10)

lbl_3=tk.Label(root,text="シャッター速度(秒)")
lbl_3.place(x=170, y=10)

lbl_4=tk.Label(root,text="EV値")
lbl_4.place(x=20, y=250)

lbl_5=tk.Label(root,text="被写体の概略")
lbl_5.place(x=20, y=300)


### Listbox for ISO ###
var_1 = StringVar(value=["50", "100", "200","400","800","1600","3200","6400","12800","25600"])

listbox_1 = tk.Listbox(root,
listvariable=var_1,
#selectmode = 'browse', #browse...単一 / extended...複数
height = 10,
width=8,
)

listbox_1.place(x=20, y=30)


### Listbox for 絞り ###
var_2 = StringVar(value=["1.2", "1.4", "2","2.8","4","5.6","11","16","22","32"])

listbox_2 = tk.Listbox(root,
listvariable=var_2,
#selectmode = 'browse', #browse...単一 / extended...複数
height = 10,
width=8,
)

listbox_2.place(x=100, y=30)

### Listbox for シャッター速度 ###

var_3 = StringVar(value=["30", "15", "8","4","2","1","1/2","1/4","1/8","1/15","1/30","1/60","1/125","1/250","1/500","1/1000","1/2000","1/4000","1/8000"])
listbox_3 = tk.Listbox(root,
listvariable=var_3,
#selectmode = 'browse', #browse...単一 / extended...複数
height = 19,
width=8,
)

listbox_3.place(x=190, y=30)


txt_1=tk.Entry(width=25)
txt_1.insert(tk.END,"明るさの理論値は EV=14 ")
txt_1.place(x=20, y=270)


txt_2=tk.Entry(text="通常の晴れの公園の明るさ", width=25)
txt_2.insert(tk.END,"通常の晴れの公園の明るさ")
txt_2.place(x=20, y=320)

root.mainloop()

 

----------------------------

③ PythonのGUI(tkinter)は難しい

 難しいから遣り甲斐があるのだけれど、もう一週間も奮闘してるままだ駄目。
 何が駄目かというと、ISO値や絞り値を選んだら即それに対するEV値を
 表示させようとしているが、複数のリストだと上手く行かない。

 

 こんな形で絞り値に対するEV値は表示できているが、ISO値に対するEV値を
 表示させようとするとエラーとなる。 ISO値だけなら動作するけれど
 複数リストだとうまく行かない。

 codeを載せても仕方ないので図だけ載せます。

 

 

 

 

 

 

 

 

 

④ ISO, 絞り、シャッター速度のEV値の算出迄できた

・リストボックスからのISO値、F値、T値は
 取得できました。
・その値に対する明るさの値(EV値)も表示できました。
・でもそれを数式に入れると表示できないのです。

・数式は正しいのですが、変数がそのスコープ(適用範囲)から
 どうも外れて使おうとしているらしいのです。
・丸一日奮闘しているのですが、自分のPythonのレベルが低くて
 まだ解決しておりません。

 

そんなわけでcodeを上げても意味がないので、図にも何が問題に
なっているのか書いておきました。 

訂正:図に「5+7+2」と有りますが、正確には「-5+7+2=4EV」という位暗い場所での測光ということになります。
   要するに、こんな暗い場所では25,600のISO値が必要という意味です。 

 

次で完成品登場(予定?)

 

Python別館
Python別館 目次

Pythonで作成したアプリ関連の記事は「Python別館」に、widgetやその使用方法・それを使 …

Python別館
英語学習アプリ ①

別項の「今日の脳トレ」で間違えたものや調べたものなどをこのアプリで学習しております。自分には随分と難 …

Python別館
listboxにスクロールバーを付ける

listboxを使用するのは簡単ですが、選択要素が増えるとスクロールボタンが必要になります。これが結 …