python - 我正在尝试使用 tkinter for GUI 在 python 中为数据库编写代码。但是,当我按下提交按钮时,.get() 函数不起作用
问题描述
这是我正在处理的代码。在我创建 sumbit 函数的部分中,我尝试使用 .get() 函数,但它不起作用。此代码用于我目前正在做的评估,并在一个月内到期。我一直在 youtube 上观看 tkinter 视频,试图了解我在做什么,但是在重新观看视频后,我找不到我的代码和他的代码之间的任何区别。视频的链接是https://www.youtube.com/watch?v=YR3h2CY21-U&list=PLCC34OHNcOtoC6GglhF3ncJ5rLwQrLGnV&index=19。我最多12分50秒。
from tkinter import *
import sqlite3
root = Tk()
# root.geometry("800x500")
# Databases
# Create a database or connect to one
conn = sqlite3.connect('incidents.db')
# create a cursor
c = conn.cursor()
# Create table
'''c.execute("""CREATE TABLE incidents (
first_name text,
last_name text,
address text,
city text,
state text,
zipcode integer
)""")'''
# Create Submit Function For database
def submit():
# Create a database or connect to one
conn = sqlite3.connect('incidents.db')
# Create cursor
c = conn.cursor()
# Insert Into Table
c.execute("INSERT INTO incidents VALUES (:name, :date, :address, :city, :state, :zipcode)",
{
'name': Name.get(),
'date': date.get(),
'address': address.get(),
'city': city.get(),
'state': state.get(),
'zipcode': zipcode.get()
})
# Commit Changes
conn.commit()
# Close Connection
conn.close()
# Clear The Text Boxes
Name.delete(0, END)
date.delete(0, END)
address.delete(0, END)
city.delete(0, END)
state.delete(0, END)
zipcode.delete(0, END)
# Create Text Boxes
Name = Entry(root, width=30).grid(row=0, column=1, padx=20, pady=(10, 0))
date = Entry(root, width=30).grid(row=0, column=3)
address = Entry(root, width=30).grid(row=0, column=5)
city = Entry(root, width=30).grid(row=0, column=7)
state = Entry(root, width=30).grid(row=1, column=1)
zipcode = Entry(root, width=30).grid(row=1, column=3)
delete_box = Entry(root, width=30).grid(row=1, column=5, pady=5)
# Create Text Box Labels
name_label = Label(root, text="Name").grid(row=0, column=0, pady=(10, 0))
date_label = Label(root, text="Last Name").grid(row=0, column=2)
address_label = Label(root, text="Address").grid(row=0, column=4)
city_label = Label(root, text="City").grid(row=0, column=6)
state_label = Label(root, text="State").grid(row=1, column=0)
zipcode_label = Label(root, text="Zipcode").grid(row=1, column=2)
delete_box_label = Label(root, text="Select ID").grid(row=1, column=4, pady=5)
# Create Submit Button
submit_btn = Button(root, text="Add Record To Database", command=submit)
submit_btn.grid(row=6, column=0, columnspan=2, pady=10, padx=10, ipadx=100)
# Commit Changes
conn.commit()
# Close Connection
conn.close()
root.mainloop()
当我运行代码时,我收到此错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
return self.func(*args)
File "/Users/School/PycharmProjects/HelloWorld/Databases.py", line 39, in submit
'name': Name.get(),
AttributeError: 'NoneType' object has no attribute 'get'
如果有人可以帮助我,将不胜感激。
解决方案
我认为您应该尝试的是: Name=tk.StringVar(root) tk.Entry(root,textvariable=Name).grid(row=0,column=1) 然后使用 Name.get() 另一件事而不是 import * 使用 import tkinter as tk(按照惯例)。对于您的情况,您可以在没有 tk 的情况下直接编写 StingVar() 和 Entry。字首。希望这会奏效
推荐阅读
- python - 在一定范围内找到有间隙的子列表
- laravel-5 - Laravel blade echo the value doesn't work
- javascript - document.getElementById(...) 在 Chrome 中为 null,但适用于旧浏览器,如旧 IE
- android - Android Studio 根据谷歌文档设置变量名
- postgresql-9.3 - 我的 Postgres 查询无法正常工作
- angular - 如何以角度在组件之间传递数据
- qnamaker - 如何使用 QnA Maker API v4.0 更新现有知识库?
- jenkins - 测试和生产环境的 CI/CD 管道部署流程
- java - ValueObject 的职责是什么
- ios - 如何以编码结构发布数据?