2016-11-11 6 views
0

データベースを使用してtkinterをguiとして、書籍の詳細を格納するライブラリ用のプログラムを作成しています。プログラムの特徴は、ユーザーが書籍の名前を入力し、データベースを検索し、その名前を含む書籍を含むレコードを返すことです。tkinterエントリボックス(Python)からレコードを検索するときにsqliteデータベースからレコードを返す方法

def bookSearch(event): 
    top = Toplevel() 
    top.title("Book Search") 

    Label(top, text = "Enter the name of the book you are searching for: ").grid() 

    bookSearchEntry = Entry(top) 
    bookSearchEntry.grid(row = 0, column = 1) 


    def dbSearchForBooks(event): 
     getRecord = c.execute("Select * FROM bookList WHERE BookName = ?",(bookSearchEntry.get(),)) 
     strGetRecord = str(getRecord) 

     t = Text(top, height = 100, width = 100) #creates a text widget where the records will be inserted into 
     t.grid(row = 1, column = 0, columnspan = 3) #packs the widget into the window 
     t.insert(END, strGetRecord + "\n") #inserts the records into the window 

    bookSearchButton = Button(top, text = "Search", command = dbSearchForBooks(event)) 
    bookSearchButton.grid(row = 0, column = 2) 

私はこのコードですべてのエラーメッセージを取得しておりません、しかし、それだけでテキストウィジェットで <sqlite3.Cursor object at 0x0406B9E0> を言っている:ここで私は現在、この機能を持っているコードです。関数が最初に実行されたときには空でなければならず、次に私が探している本の名前を入力します。 "Harry Potter"と入力すると、テキストウィジェットが "Harry Potter"という書籍名の行のbookListテーブルの行で更新されます。私が検索した場合、テキストウィジェットが更新されない、それだけで常に

<sqlite3.Cursor object at 0x0406B9E0> 

を言っている私はあなたに感謝し、任意のヘルプを歓迎ですので、これを修正する方法について困惑しています。

+0

検索を行うたびにテキストウィジェットを作成する必要はありません。テキストウィジェットを一度作成すると、古い検索を新しいウィジェットに置き換えることができます。書かれているように、1つのテキストウィジェットを別のウィジェットの上に重ねるだけです。 –

+0

これを実行しても同じことが実行されている場合、ウィジェットは更新されていません。 – JoeW373

+0

ウィジェットの上にウィジェットを作成しただけでメモリリークが解決されます。 –

答えて

1

このコンテナからレコードを取得する必要があると思います(リストと同じように)。 strGetRecord = ' '.join([str(record) for record in getRecord])

+0

も、1つのレコードだけ実行されるだけではないことを忘れないでください。最初に見つかったレコードからレコードを取得するには、 'getRecord [0]'を使用してください。 –

+0

私はそのコードを使用しましたが、今テキストウィジェットは次のように表示しています:( ''、 '')検索ボタンを押すと、更新していない、それはちょうど同じにとどまっている – JoeW373

+0

テーブルに2つの空白がありますか?クエリが結果を取得するbookListテーブルには2つのカラムがあるためです。しかし、プログラムでフィールドが空白になるのはなぜですか? – JoeW373

関連する問題