2016-10-19 11 views
-1
from sqlite3 import * 

def insert_record(Who, Invented): 

    connection = connect(database = "activity.db") 

    internet = connection.cursor() 

    list = "INSERT INTO Information VALUES((Alexander_Graham, Phone))" 

    internet.execute(list) 

    rows_inserted = internet.rowcount 

    connection.commit() 

    internet.close() 
    connection.close() 

#GUI interface 
from Tkinter import * 
window = Tk() 

the_button3 = Button(window, text='Record', command = insert_record).grid(row=1, sticky=W, padx=100,pady=5) 
window.mainloop() 

私は、Recordボタンを押すと、情報の値(それぞれ、WhoとInventedという2つのフィールドがあります)がactivity.dbに追加されます。レコードAlexander_Grahamと電話。Python SQLite TypeError

* activity.dbコード

と同じフォルダにすでに既成のですが、代わりに、私はこのエラーを取得する: 例外TypeError:insert_record()は正確に2つの引数(0が与えられた)私はどのように

を取ります修理する?

+1

を使用してそれを行うことができますインデントを修正してください。エラーの意味を理解していますか? – wwii

+0

私の悪いです。すでにインデントを修正しました。 – Yasutsuna

答えて

0

insert recordは、値を渡さなかった2つの必須の引数をとる関数です。それは同じことがあなたのTKアプリとしてだったに失敗し、この機能で

In [1]: def func(one,two): 
    ...:  return one+two 
    ...: 

In [2]: func() 
------------------------------------------------------------------------- -- 
TypeError         Traceback (most recent call  last) 
<ipython-input-2-08a2da4138f6> in <module>() 
----> 1 func() 

TypeError: func() takes exactly 2 arguments (0 given) 

In [3]: func(1,3) 
Out[3]: 4 

command = insert_record 

アクションでこの良い例では、次のテストシーケンスです。デフォルト値を持つ関数を提供するか、別の方法で処理する必要があります。

0

ボタンを押すと、tkinterは常に引数なしで関数insert_record()を実行します。

引数なしで関数も定義する必要があります。

def insert_record(): 

または既定値ieを使用します。

def insert_record(Who=None, Invented=None): 

それとも、引数を持つ関数を割り当てる必要が - あなたはlambda

command=lambda:inser_record("Thomas Edison", "Bulb") 
+0

ああ、そうだ。それは今働いた。説明ありがとう。 – Yasutsuna