2017-04-10 12 views
2

ユーザーがログインボタンをクリックすると "Employee"テーブルが検索され、入力されたIDがテーブルに見つからない場合にエラーメッセージが表示されるように、しかし、私はこのエラーを受け取る印刷維持される -TkinterでボタンをクリックしてSQL検索を実行

"Tkinterのコールバックの例外 トレースバック(最新の呼び出しの最後): ファイル" C:\ Users \ユーザーユーザー\のAppData \ローカル\プログラム\ Pythonの\ Python36-32を(* args) TypeError:login()missing 1必要な位置引数: 'id' "

from tkinter import * 
import sqlite3 

global employeeIDVar 

win = Tk() 
img = PhotoImage(file = 'download_1_.gif') 
imgLbl = Label (win, image = img) 

frame1=Frame(win) 
frame1.pack() 
Label(frame1, text="Welcome to the system!",font=('Comic Sans MS',18)).grid(row=0, column=1) 

Label(frame1, text="EmployeeID").grid(row=1, column=0, sticky=W) 
employeeIDVar=IntVar(win) 
eID= Entry(frame1, textvariable=employeeIDVar) 
eID.grid(row=1,column=1,sticky=W) 

frame2 = Frame(win) 
frame2.pack() 

b1= Button(frame2, text=" Login ") 
b2= Button(frame2, text=" Quit ") 
b1.pack(side=LEFT); b2.pack(side=LEFT) 

def login(id): 
    with sqlite3.connect("comicBookGuys.db") as db: 

      cursor = db.cursor() 
      cursor.execute ("select employeeID, numberOfSales, salesTarget from Employee where employeeID=?", (id,)) 
      dataFound = cursor.fetchone() 
      return dataFound  

      if not dataFound: 
       messagebox.showinfo("No such employeeID found! Try again.") 

def logEnd(): 
    exit() 

b1.configure(command=login) 
b2.configure(command=logEnd) 
win.mainloop() 

win.mainloop() 
+0

エラーが一目瞭然になります。あなたは、パラメータを必要とするため、 'login'を定義しましたが、ボタンはそのパラメータを渡していません。 –

+0

たびにパラメータを取得しようとしました - sqlite3.InterfaceError:パラメータ0のバインディングでエラーが発生しました - おそらくサポートされていないタイプです。 –

答えて

2

GUIの一般的な書き方は、コールバックで情報を渡さないことです。代わりに、コールバックは、UIの実行時にUIから情報を要求します。

あなたのケースでは、loginのパラメータを削除し、loginを変更して、呼び出されたときに情報を取得することをお勧めします。例えば

def login(): 
    id = eID.get() 
    ... 
+0

完璧に働いています。ありがとうございました! –