在我的程序中,我使用tkinter作为gui,我有条目,用户可以输入书籍的ID和书籍的名称,以将书籍添加到数据库记录(使用sqlite数据库)
def bookListEntry(event):
top = Toplevel()
top.title("Append to book list")
bookIDLabel = Label(top, text= "bookID: ").grid(row = 0)
bookIDEntry = Entry(top).grid(row = 0, column = 1)
bookNamelabel = Label(top, text = "bookName: ").grid(row = 1)
bookNameEntry = Entry(top).grid(row = 1, column = 1)
quitButton = Button(top, text = "Exit", command = top.destroy)
quitButton.grid(row = 2, column = 1)
appendButton = Button(top, text = "Append", command = appendToBookList)
appendButton.grid(row = 2, column = 2)
def appendToBookList():
c.execute("INSERT INTO bookList VALUES (?, ?);",(bookIDEntry, bookNameEntry))
conn.commit()
但是,我收到错误“NameError:name'bookidentry'未定义” 我对全局变量和局部变量有所了解,而且我很确定它不起作用,因为它是一个局部变量,但我想不出有一种方法可以让appendToBookList()知道条目的值。 另外,另一个问题是我认为如果它有用,那么它可以在db中的字段中附加变量的名称,而不是在输入框中键入的内容。知道如何解决这些问题吗?谢谢
答案 0 :(得分:0)
未经测试
def book_list_entry(event):
top = Toplevel()
top.title("Append to book list")
Label(top, text="bookID: ").grid(row=0)
book_id_entry = Entry(top)
book_id_entry.grid(row=0, column=1)
Label(top, text="bookName: ").grid(row=1)
book_name_entry = Entry(top)
book_name_entry.grid(row=1, column=1)
b = Button(top, text="Exit", command=top.destroy)
b.grid(row=2, column=1)
b = Button(top, text="Append", command=lambda:append_to_bookList(book_id_entry.get(), book_name_entry.get())
b.grid(row=2, column=2)
def append_to_bookList(book_id, book_name):
c.execute("INSERT INTO bookList VALUES (?, ?);", (book_id, book_name))
conn.commit()
如果您需要变量var
,则必须使用
var = Widget(...)
var.grid(...)
你无法做到
var = Widget(...).grid(...)
因为grid/pack/place
返回None
,您将在None
而不是预期的小部件中获得var
。
如果您不需要var
,那么
Widget(...).grid(...)
您必须使用entry.get()
从条目中获取文字
book_id_entry.get(), book_name_entry.get()
您可以使用参数(条目中的文本)调用append_to_BookList
,但您必须使用lambda
来创建没有变量的匿名函数。
command=lambda:append_to_bookList(book_id_entry.get(), book_name_entry.get())
类似于
temp_function_name = lambda:append_to_bookList(book_id_entry.get(), book_name_entry.get())
Button( ..., command=temp_function_name)
我使用首选
lower_case_names
用于功能和变量。=
,没有空格。