2017-02-21 20 views
0

Я нахожусь на начальной стадии написания приложения адресной книги. Когда я запустил приложение и ввел имя, фамилию и нажмите «Добавить», я получаю сообщение об ошибке. В базу данных ничего не добавлено.Проблемы с моим приложением Tkinter/Sqlite Python

Вот сообщение об ошибке:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__ 
    return self.func(*args) 
    File "address.py", line 13, in addName 
    (last_name, first_name)) 
sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type. 

Вот мой код:

from tkinter import * 
from tkinter import ttk 
import sqlite3 

conn = sqlite3.connect('address.db') 
c = conn.cursor() 
c.execute('''CREATE TABLE IF NOT EXISTS address (lastName TEXT, firstName TEXT)''') 
conn.commit 

def addName(event): 

    c.execute("INSERT INTO address (lastName, firstName) VALUES (?,?)", 
      (last_name, first_name)) 

    conn.commit() 

root = Tk() 
root.title('Address Book') 
Label(root, text='First Name').grid(row=0, sticky=W, padx=4) 
first_name = Entry(root) 
first_name.grid(row=0, column=1, sticky=E, pady=4) 

Label(root, text='Last Name').grid(row=1, sticky=W, padx=4) 
last_name = Entry(root).grid(row=1, column=1, sticky=E, pady=4) 

getNameButton = Button(root, text='Add') 
getNameButton.bind('<Button-1>', addName) 
getNameButton.grid(row=3, column=1, sticky=E) 

root.mainloop() 

ТИА,

Gabriel

+0

Подсказка: вы не можете сохранить виджет в базе данных, только значение, хранящееся в виджетах. Спросите себя, что такое тип данных first_name и last_name. –

+0

Я понимаю, что я эффективно делаю, пытаясь сохранить виджет в базе данных. Что мне нужно сделать, так это сохранить имя и фамилию от виджета в базе данных? Как мне это сделать? –

+0

Прочитайте документацию по виджету 'Entry' и выполните поиск на этом сайте. Вы задаете вопросы, которые были заданы несколько раз и описаны во многих сайтах, в которых описывается, как использовать tkinter. –

ответ

0

Я думаю, что это может помочь: c.execute ('INSERT INTO address (lastname, firstname) VALUES (?,?)', ([Last_name, first_name]))

+0

Я получил sqlite, чтобы взять мой вход. Я теперь зациклился на том, как передать переменную из Tkinter в SQLite. –

+0

Если вы используете окно ввода, вы можете действовать как текстовое. Например, my_entry = Entry (root, textvariable = first_name). Затем вы можете использовать first_name.get() для получения того, что написано в записи. Если вам нужен ресурс, я бы попробовал effbot.org, чтобы объяснить все свойства записей. – cjonesrun

+0

Именно это я и искал. Благодаря!!! –

 Смежные вопросы

  • Нет связанных вопросов^_^