EntryおよびLabelウィジェットでtextvariablesを使用しようとしています。問題は、変数を常に2桁の小数点以下を四捨五入して浮動小数点にすることです。これを行う有効な方法は、真の浮動小数点値を内部値として保持しながら、フォーマットされたstrとして出力する新しいタイプのTkinter変数を作成することだと考えました。Tkinterのテキスト変数の新しいタイプ
私は私の変数クラスを設定支援するためのTkinterの__init__.py中のコードを見て:
class FormatDoubleVar(tk.Variable):
_default = 0.0
def __init__(self, iDecimal = 2):
tk.Variable.__init__(self)
self.decimal = iDecimal
self.fValue = 0
# convert strings back to float to save f value.
def set(self, iValue):
if isinstance(iValue, str):
iValue = float(iValue.replace(",",""))
self.fValue = round(float(iValue),self.decimal)
fmtstr = "{:,." + str(self.decimal) + "f}"
value = fmtstr.format(self.fValue)
return self._tk.globalsetvar(self._name, value)
def getValue(self):
return self.fValue
私は私のエントリウィジェットのために、この変数を使用する場合しかし、私は値にアクセスするために見ることができません私は変数自体を通してエントリーに入ります。私はエントリーへのコールバックを添付し、割り当てられたtextvariableの値は、私がプログラムを実行するときに何を変更しても、私の古い値のままです。
私はクラスを正しく作成しなかったので、これは問題ですか?私はtkinterのソースコードで、他の変数は "get"メソッドだけをオーバーロードすることに気づいていますが、 "set"時にも値をフォーマットする必要があります。
インデントが正しくありません –
固定インデント – TwoFeis