2016-07-15 10 views
-1

私が入力欄に入力するものは、自動的に小数点以下をn桁に丸めて入力します。私はあなたが何をしたいと仮定しPythonで小数点以下をn桁に丸める方法

import Tkinter as Tk 

root = Tk.Tk() 

class InterfaceApp(): 
    def __init__(self,parent): 
     self.parent = parent 
     root.title("P") 
     self.initialize() 


    def initialize(self): 
     frPic = Tk.Frame(bg='', colormap='new') 
     frPic.grid(row=0) 
     a= Tk.DoubleVar() 
     self.entry = Tk.Entry(frPic, textvariable=a) 
     a.set(round(self.entry.get(), 2)) 

     self.entry.grid(row=0) 
if __name__ == '__main__': 
    app = InterfaceApp(root) 
    root.mainloop() 
+0

あなたの 'a'は' IntVar'ではありません。整数...? –

+1

これはどのように機能しますか?丸めはいつ起きますか?入力すると?フォーカスが去るとき? – mgilson

+0

それは 'DoubleVar()'です、私はそれを修正しました。 –

答えて

1

あなたはむしろその上のボタンウィジェットにcallbackを添付する必要があります、押した後、あなたが探している振る舞いが実行されます:

import Tkinter as Tk 

root = Tk.Tk() 

class InterfaceApp(): 

    def __init__(self,parent): 
     self.parent = parent 
     root.title("P") 
     self.initialize() 

    def initialize(self): 
     frPic = Tk.Frame(bg='', colormap='new') 
     frPic.grid(row=0, column=0) 
     self.a = Tk.DoubleVar() 
     self.entry = Tk.Entry(frPic, textvariable=self.a) 
     self.entry.insert(Tk.INSERT,0) 
     self.entry.grid(row=0, column=0) 
     # Add a button widget with a callback 
     self.button = Tk.Button(frPic, text='Press', command=self.round_n_decimal) 
     self.button.grid(row=1, column=0) 
    # Callback  
    def round_n_decimal(self):  
     self.a.set(round(float(self.entry.get()), 2)) 

if __name__ == '__main__': 
    app = InterfaceApp(root) 
    root.mainloop() 
+0

私はボタンなしでそれを作ることもできますか? –

+0

@MirzaGrbicライブボタン*の意味を教えてください。 –

+0

値を入力すると、ボタンを押す前に自動的に丸められます。 Billalさん、ありがとう! –

0

がfloat値自体を丸めることではない、あなたは、n進ポイントの精度で浮動小数点値を表示したいです。試してみてください:

>>> n = 2 
>>> '{:.{}f}'.format(3.1415926535, n) 
'3.14' 
>>> n = 3 
>>> '{:.{}f}'.format(3.1415926535, n) 
'3.142' 

注:コード内では、self.entry .iを試してみてください。 e。タイプTk.Entryのインスタンスを丸めようとします。文字列を提供するself.entry.get()を使用する必要があります。

この種の文字列フォーマットに慣れていない場合は、私は見てhereを使用します。

あなたが initialize()a.set(round(self.entry, 2))を実行すると、 self.entry.get()の値は常に 0(作成後のデフォルト値)であるので、あなたが期待する結果を得ることはありません
+0

いいえ、丸め値そのものを入力します(入力欄に入力する値は丸めます)。私はそれを修正し、それはまだ働いていない。 'a = Tk.DoubleVar()' 'self.entry = Tk.Entry(frPic、textvariable = a)' 'a.set(round(self.entry.get()、2))' –

+0

どういう意味ですか? 「うまくいかない」?出力/結果を投稿してください – Humbalan

関連する問題