ImageJ のインターアクティブ UI を書いていて、次のようなエラーメッセージが出ました。
ValueError: invalid literal for float
このエラーが出たのは以下のコードでした。
self.maskThr = float(self.nfield_maskThr.getText())
UI の numericField から値を取得して、それを UI に反映させようとするコードです。この時、ImageJ の API 上では直接数値を取得できます。しかし、UI でインターアクティブに動かそうとすると、textListener 上でモニタしなければなりません。
ということは、直接数値で取得することはできず、一旦テキストデータとして取得してから組み込み関数で数値に直して UI に反映させる必要があります。その際に何かの拍子に上のエラーが出るようでした。
ただこのコードを以下のように変えるとエラーが出ません。
tempText = self.nfield_maskThr.getText()
self.maskThr = float(tempText)
それに、エラーメッセージが出ても、とりあえずちゃんと動くようです。色々考えてみてわかったことは、データを入れ直そうとして、一時的に数字を全て消した時に、つまり、numericField に何も入っていない状態になった時にエラーメッセージが出るようです。何も入っていないので、float で数値に変換しようとしてもできない、ということのようです。
但し、一旦変数に入れてから、float をかけると、その変数に何も入っていない時は、0 と解釈してくれるようでエラーメッセージが出ないようです。
そこで、上のエラーを回避するために以下のように変更してみるとうまくエラーメッセージが出なくなりました。
if self.nfield_maskThr.getText() !="":
self.maskThr = float(str(self.nfield_maskThr.getText()))
つまり、numericField が空白でない時のみ、float で変換するようにしたわけです。