使用 tkinter 和 db 连接的 Python GUI
Posted
技术标签:
【中文标题】使用 tkinter 和 db 连接的 Python GUI【英文标题】:Python GUI using tkinter and db connection 【发布时间】:2015-01-15 18:37:27 【问题描述】:我无法从以下程序中获得任何输出。我在这里要做的是将员工姓名和薪水存储在数据库中,然后根据姓名和 ID 删除数据库条目。它没有给出错误。我认为这是一个数据库错误。它没有在 db 中插入任何值。请帮忙。谢谢
import Tkinter
import sqlite3
import ttk
def put(*args):
try:
e_name = str(i_name)
e_pay = int(i_pay)
conn = sqlite3.connect('medha.db')
c = conn.cursor()
c.execute('create table if not exists employee(id integer primary key auto increment, name text, salary integer)')
c.execute('insert into employee(name, salary) values(?,?)',(e_name,e_pay))
conn.close()
notice = 'insertion successful'
except:
notice ='insert proper values'
def del_id(*args):
try:
e_id = int(d_del)
conn = sqlite3.connect('medha.db')
c = conn.cursor()
c.execute('delete from employee where id =?',(e_id))
notice = 'deleted successfully'
conn.close()
except:
notice = 'insert proper values'
def del_name(*args):
try:
e_name = int(d_del)
conn = sqlite3.connect('medha.db')
c = conn.cursor()
c.execute('delete from employee where name = ?',(e_name))
notice = 'deleted successfully'
conn.close()
except:
notice = 'insert proper values'
root = Tkinter.Tk()
root.title('Python Projet - gui and db')
mainframe = ttk.Frame(root,padding='3 3 12 12' )
mainframe.grid(column=0, row=0)
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight =1)
i_name = str()
i_id = str()
i_pay = str()
notice = str()
d_del = str()
i_name_entry = ttk.Entry(mainframe, width =7, textvariable = i_name)
i_name_entry.grid(column = 1, row = 1)
i_id_entry = ttk.Entry(mainframe, width =7, textvariable = i_id)
i_id_entry.grid(column = 2, row = 1)
i_pay_entry = ttk.Entry(mainframe, width =7, textvariable = i_pay)
i_pay_entry.grid(column = 3, row = 1)
i_del_entry = ttk.Entry(mainframe, width =7, textvariable = d_del)
i_del_entry.grid(column = 1, row =4)
ttk.Label(mainframe, text ='Name of Employee').grid(column = 1, row = 0)
ttk.Label(mainframe, text ='Employee ID').grid(column = 2, row =0)
ttk.Label(mainframe, text ='Employee Pay').grid(column = 3, row=0)
ttk.Label(mainframe, text ='Name/ID of Employee to delete').grid(column = 1, row=3)
ttk.Label(mainframe, text = notice).grid(column = 1, row = 6)
ttk.Button(mainframe, text='Insert', command = put).grid(column=3, row=2)
ttk.Button(mainframe, text='Delete By ID', command = del_id).grid(column =1, row = 5)
ttk.Button(mainframe, text='Delete By Name', command = del_name).grid(column = 3, row=5)
for child in mainframe.winfo_children(): child.grid_configure(padx=5,pady=5)
i_name_entry.focus()
root.mainloop()
感谢任何帮助。
【问题讨论】:
“将员工姓名和薪水存储在数据库中,然后根据姓名和 ID 删除数据库条目” - 您描述的哪一部分不起作用? 我能够获得 GUI,但是在单击按钮时 put() 函数不起作用.. 甚至没有创建数据库。 如果您怀疑发生了错误,删除 try-except 块可能会很有用,因为它们会阻止将任何堆栈跟踪打印到控制台。 @Kevin 你的想法奏效了.. 得到了错误.. 说 int 的文字无效,基数为 10.. 当我将文本从输入字段转换为整数时会发生这种情况 e_pay = int(i_pay)跨度> 啊,那是因为i_pay
始终保持值""
,因为当用户输入i_pay_entry
时它不会更新。您也可以将 i_pay
设为 StringVar,然后将 e_pay = int(i_pay.get())
设为。与所有其他 str() 变量类似。
【参考方案1】:
ttk.Label(mainframe, text = notice).grid(column = 1, row = 6)
更改字符串 notice
的值不会更新此标签中的文本。您需要为此使用StringVar。
notice = Tkinter.StringVar()
ttk.Label(mainframe, textvariable = notice).grid(column = 1, row = 6)
然后,不要在你的函数中使用notice = "whatever"
,而是使用notice.set("whatever")
。
或者,根本没有 notice
值。直接重新配置 text 变量即可。
notice_label = ttk.Label(mainframe, text = "")
notice_label.grid(column = 1, row = 6)
(注意:不要尝试在同一行分配notice_label
和做grid
,这是行不通的)
然后使用notice_label.config(text = "whatever")
而不是notice = "whatever"
。
【讨论】:
它说未定义 StringVar()。我是否必须导入任何东西才能使其工作。StringVar
属于Tkinter
模块,所以你可能需要做notice = Tkinter.StringVar()
。
使用 Tkinter.StringVar() 为我工作..但代码仍然无法正常工作..在按钮点击它仍然不执行 put() 函数
您是否 100% 确定 put
没有被调用?如果将print "put is being called"
作为put
函数的第一行,会打印该值吗?我试过了,它可以在我的机器上运行。
值没有进入数据库..因为它说值已插入但数据库中没有任何内容【参考方案2】:
首先尝试查看您是否已连接到数据库。使用 postgreSQL,您可以通过 psycopg2 进行连接
import psycopg2
try:
conn = psycopg2.connect(database="user", user="postgres", password="silverTip", host="localhost")
print("connected")
except:
print ("I am unable to connect to the database")
cur =conn.cursor()
所以如果你连接到数据库,它会打印连接, 否则您将收到无法连接到数据库的消息
【讨论】:
以上是关于使用 tkinter 和 db 连接的 Python GUI的主要内容,如果未能解决你的问题,请参考以下文章
python连接MySQL数据库问题? cursor( ) 、execute()和fetc