2017-04-25 10 views
-1

私のtkinterプログラムでdatetimeを使用する際に問題があります。 問題は、この行にあるように見えます:コードの型エラーdatetime.date、必要な引数 'month'(pos 2)が見つかりません

user = Person('User', datetime.date(int(year_entry.get())), (int(month_entry.get())), (int(day_entry.get()))) 

全コード:

import datetime 
    import tkinter as tk 

    # GUI 
    window = tk.Tk() 
    window.geometry('200x400') 
    window.title('Age calculator') 

    info_label = tk.Label(text='Calculate your age!') 
    info_label.grid(column=1, row=0) 


    year_label = tk.Label(text='Year') 
    year_label.grid(column=0, row=1) 

    month_label = tk.Label(text='Month') 
    month_label.grid(column=0, row=2) 

    day_label = tk.Label(text='Day') 
    day_label.grid(column=0, row=3) 

    year_entry = tk.Entry() 
    year_entry.grid(column=1, row=1) 

    month_entry = tk.Entry() 
    month_entry.grid(column=1, row=2) 

    day_entry = tk.Entry() 
    day_entry.grid(column=1, row=3) 

    def calculate_age(): 
     print(year_entry.get()) 
     print(month_entry.get()) 
     print(day_entry.get()) 
     user = Person('User', datetime.date(int(year_entry.get())), (int(month_entry.get())), (int(day_entry.get()))) 

     print(user.age()) 
     print('klick!') 

     text_answer = tk.Text(master=window, height=20, widt=30) 
     text_answer.grid(column=1, row=5) 
     text_answer.insert(tk.END, 'Banana!') 


    calc_button = tk.Button(text='Calculate!', command=calculate_age) 
    calc_button.grid(column=1, row=4) 


     class Person: 

      def __init__(self, name, birthdate): 
       self.name = name 
       self.birthdate = birthdate 

      def age(self): 
       today = datetime.date.today() 
       age = today.year - self.birthdate.year 
       return age 

window.mainloop() 

私はエントリの中で1〜2及び3に入れ、GUIで「計算」を押しました。

Error code: 1 2 3 Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\jimmy\AppData\Local\Programs\Python\Python36-32\lib\tkinter__init__.py", line 1699, in call return self.func(*args) File "C:\Users\jimmy\Programming\Apps_OOP\calculator_app.py", line 35, in calculate_age user = Person('User', datetime.date(int(year_entry.get())), (int(month_entry.get())), (int(day_entry.get()))) TypeError: Required argument 'month' (pos 2) not found

助けてください!この中

+0

これは誤植です。角かっこを確認してください。あなたのコードでは、月と日の値はdatetime.date()ではなくPerson()への引数として渡されます。 –

+0

かっこをもう一度確認してください。あなたはあまりにも多くを持っている –

+0

U人は素晴らしいです!ありがとうございました! – Stenmanj

答えて

0

変更行35:

user = Person('User', datetime.date(int(year_entry.get()), int(month_entry.get()), int(day_entry.get()))) 
1

バグは、このコードのスパンである:

datetime.date(int(year_entry.get())) 

あなたは括弧を数える場合、あなたはあなたが閉鎖していることがわかりますdatetime.dateに電話してください。したがって、必要な引数が含まれていないというエラーが表示されます。

コードの1行であまりにも多くを実行しようとしているため、バグが見づらくなります。あなたは、エントリウィジェットから値を格納するために、一時的な変数を使用して、例えばdatetime.date

に引数として変数を使用する必要があります。

year = int(year_entry.get()) 
month = int(month_entry.get()) 
day = int(month_entry.get()) 
date = datetime.date(year, month, day) 
user = Person('User', date) 

それは、コードの行以上だが、もっと重要なことは、より多くの行です可読性コード。さらに、関数に渡される実際の値を簡単に出力できるという利点があります。

+0

大きなアドバイスは、はるかに読みやすい!ありがとうございました! – Stenmanj

関連する問題