我想在入口和標籤小部件中使用文本變量。問題是我希望我的變量始終是四捨五入到兩位十進制數字。我認爲一個有效的方法是創建一個新類型的Tkinter變量,將其作爲格式化的str輸出,同時將真實的float值保留爲內部值。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
然而,當我使用這個變量對我的Entry組件,我看不到訪問值我進入通過變量本身。無論我在運行程序時將其更改爲什麼,我都將回調附加到Entry中,並且指定的textvariable的值保留爲舊值。
這是一個問題,因爲我沒有正確創建類?我注意到在tkinter源代碼中,其他變量只重載「get」方法,但我需要在「set」過程中對值進行格式化。
您的縮進不正確 –
固定縮進 – TwoFeis