2017-05-02 4 views
1

長距離の特定の時刻に通話料金を表示するラジオボタンを使用してプログラムを作成することが任されています。昼間は毎分0.07、夕方は毎分0.12で、ピークは毎分0.05です。何らかの理由で、話した分の量を特定の時間帯の料金で乗算し、答えを出力する方法を理解できないようです。Python Tkinter長距離通話

これは、これまでの私のコードであり、私は$ 0出力を取得しています:

import tkinter 
import tkinter.messagebox 

def main(): 
    my_gui = TelephoneRatesGUI() 

class TelephoneRatesGUI(): 

    def __init__(self): 
     self.main_window = tkinter.Tk() 

     #create 3 frames 
     self.top_frame = tkinter.Frame(self.main_window) 
     self.mid_frame = tkinter.Frame(self.main_window) 
     self.bottom_frame = tkinter.Frame(self.main_window) 

     #create an intvar object 
     self.radio_var = tkinter.IntVar() 

     #set the intVar object to 1. 
     self.radio_var.set(1) 

     #create the radiobutton widgets in the top_frame 
     self.rb1 = tkinter.Radiobutton(self.top_frame, 
             text='Daytime(6:00am - 5:59pm)', 
             variable=self.radio_var, 
             value=.07) 
     self.rb2 = tkinter.Radiobutton(self.top_frame, 
             text='Evening(6:00pm - 11:59pm)', 
             variable=self.radio_var, 
             value=.12) 
     self.rb3 = tkinter.Radiobutton(self.top_frame, 
             text='Off-Peak(12:00am - 5:59am)', 
             variable=self.radio_var, 
             value=.05) 

     #pack the radiobuttons 
     self.rb1.pack() 
     self.rb2.pack() 
     self.rb3.pack() 

     #create widgets for the middle frame 
     self.prompt_label = tkinter.Label(self.mid_frame, 
              text='Enter the number of minutes:') 
     self.num_min = tkinter.Entry(self.mid_frame, 
            width=10) 

     #pack the mid frame's widgets 
     self.prompt_label.pack(side='left') 
     self.num_min.pack(side='left') 

     #create a display charges button and a quit button 
     self.dis_button = tkinter.Button(self.bottom_frame, 
             text='Display Charges', 
             command=self.show_charges) 
     self.quit_button = tkinter.Button(self.bottom_frame, 
              text='Quit', 
              command=self.main_window.destroy) 

     #pack the buttons 
     self.dis_button.pack(side='left') 
     self.quit_button.pack(side='left') 

     #pack the frames 
     self.top_frame.pack() 
     self.mid_frame.pack() 
     self.bottom_frame.pack() 

     #start the mainloop 
     tkinter.mainloop() 

    def show_charges(self): 
     charges = float(self.radio_var.get()) 

     minutes = float(self.num_min.get()) 

     tkinter.messagebox.showinfo('Total Charges', 'Your total charges = $' + 
            format(float(charges*minutes))) 

main() 
+0

あなたはどんな問題を抱えていますか? 「なぜこのコードが動作しないのか」と尋ねるのは、ここでは話題にはなりません。あなたはどんな特定の問題を抱えていますか? UIから値を取得するには?計算していますか?結果をUIに戻しますか?他に何か?あなたは 'show_charges'で' charges'と 'minutes'があなたの期待するものであることを確認しましたか? –

+0

出力が正しくありません。それはちょうど$ 0です。あなたがプログラムに入力した分の量に料金の設定値を掛けなければなりません。 – Classicalclown

答えて

1

あなたがtkinter.DoubleVarするself.radio_varを変更する必要があります。私は、次の変更を加え、プログラムが動作するようになった:

self.radio_var = tkinter.DoubleVar() 

注:自分でこの問題を解決することができなかったことを事実は、あなたのプログラムのコンソール出力を見ていなかったことを示しています。次回はコンソールからプログラムを実行するので、例外のトレースバックが見えます。

更新:コメントは、コンソールでプログラムを実行していたものの、エラーは表示されなかったとします。

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1550, in __call__ 
    return self.func(*args) 
    File "old.py", line 73, in show_charges 
    charges = float(self.radio_var.get()) 
    File "/usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 355, in get 
    return self._tk.getint(self._tk.globalgetvar(self._name)) 
TypeError: getint() argument must be str, not float 

、あなたの元のコードでこのタイプの出力が表示されない場合、私はトラブルあなたは私からあなたのプログラムを実行する」と言うとき、私が何を意味するか知っていると信じてを持っている:私はあなたのプログラムを実行したとき、私はこのトレースバックを得ましたコンソール "。

+0

私はされましたが、それは私にエラーを与えていませんでした。さらに、私はdoublevar()について学んでいないが、いずれにしても – Classicalclown

+0

あなたの助けに感謝します。私は答えを書式化し、すべてが完全に機能しています。 – Classicalclown

+0

シュート、私はそれを考え出したかもしれないが、私のコードを更新していない。それは私の悪かった、私は申し訳ありません。 – Classicalclown