您的位置:首页 > 编程语言 > Python开发

使用python tkinter 制作简单信息录入处理

2018-04-03 00:00 555 查看
主要有以下几个文件,简单说明一下

1.db.py 处理sql 逻辑

2.login.py 作登录使用(现在还没有实现连接数据库,只是为了功能实现)

3.stjy.py 主体窗口

4.test.db数据文件(使用sqlite3)



#db.py 主要代码,第一次执行时,把 “# create_table()”中的#去掉,执行完后,在加上
import sqlite3

def create_table():
conn = sqlite3.connect('test.db')
cur=conn.cursor()
# cur=conn.cursor()
try:
create_tb_cmd='''
CREATE TABLE IF NOT EXISTS student_info
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name          text,
phone         text,
qq            text,
weixin        text,
prid_school   text,
cslt_course   text,
cslt_from     text,
dt            text,
provider      text,
note          text
)
'''
#create table
# cur.execute(create_tb_cmd)
cur.execute(create_tb_cmd)
print('create table sucess')
except Exception as e:
print ("Create table failed" )
print(e)
pass
# return False
conn.commit()
cur.close()
conn.close()

def drop_table():
conn = sqlite3.connect('test.db')
cur=conn.cursor()
try:
drop_cmd='''drop table student_info'''
#create table
cur.execute(create_tb_cmd)
except:
print ("drop table failed" )
pass
# return False
conn.commit()
cur.close()
conn.close()

def select_data():
conn = sqlite3.connect('test.db')
cur=conn.cursor()
select_cmd=''' select * from student_info order by id desc'''
cur.execute(select_cmd)
res = cur.fetchall()
conn.commit()
cur.close()
conn.close()
return res

def edit_data(id):
name_para={'id':id}
conn = sqlite3.connect('test.db')
cur=conn.cursor()
select_cmd=''' select * from student_info where id=:id'''
cur.execute(select_cmd,name_para)
res = cur.fetchall()
conn.commit()
cur.close()
conn.close()
return res

def insert_data(name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note):
name_para={'name':name,'phone':phone,'qq':qq,'weixin':weixin,'prid_school':prid_school,\
'cslt_course':cslt_course,'cslt_from':cslt_from,'dt':dt,'provider':provider,'note':note}
conn = sqlite3.connect('test.db')
cur=conn.cursor()
insert_dt_cmd='''
INSERT INTO student_info (name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note)
VALUES (:name,:phone,:qq,:weixin,:prid_school,:cslt_course,:cslt_from,:dt,:provider,:note)
'''
print(insert_dt_cmd)
cur.execute(insert_dt_cmd,name_para)
conn.commit()
cur.close()
conn.close()

def delete_data(sdt_id,name):
name_para={'sdt_id':sdt_id,'name':name}
conn = sqlite3.connect('test.db')
cur=conn.cursor()
# cur=conn.cursor()
del_cmd=''' delete from student_info where id=:sdt_id and name=:name  '''
cur.execute(del_cmd,name_para)
conn.commit()
cur.close()
conn.close()

def update_data(std_id,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note):
name_para={'name':name,'phone':phone,'qq':qq,'weixin':weixin,'prid_school':prid_school,
'cslt_course':cslt_course,'cslt_from':cslt_from,'dt':dt,'provider':provider,
'note':note,'std_id':std_id
}
print(name_para)
conn = sqlite3.connect('test.db')
cur=conn.cursor()
update_cmd=''' update student_info set name=:name,phone=:phone,qq=:qq,
weixin=:weixin,prid_school=:prid_sch
3ff0
ool,
cslt_course=:cslt_course,cslt_from=:cslt_from,dt=:dt,
provider=:provider,note=:note where id=:std_id '''
print(update_cmd)
cur.execute(update_cmd,name_para)
conn.commit()
cur.close()
conn.close()

# drop_table()
# create_table()
# name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note

# insert_data('jonsen3','15920056968','794554422','weixin','shenzhen_school','english','shanghai','2018-03-30','tom','note')
# rs=select_data()
# std = []
# for idt,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note in rs:
#     # print(idt,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note)
#     std.append((idt,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note))
# # print(std)
# for i in range(len(rs)):
#     print(std[i][0],std[i][1],std[i][2],std[i][3],std[i][4],std[i][5],std[i][6],std[i][7],std[i][8],std[i][9],std[i][10])
# pritn(dt)
# print(rs)

#login.py

from tkinter import *

class Reg (Frame):
def __init__(self,master):
frame = Frame(master)
frame.pack()
self.lab1 = Label(frame,text = "账户:")
self.lab1.grid(row = 0,column = 0,sticky = W)
self.ent1 = Entry(frame)
self.ent1.grid(row = 0,column = 1,sticky = W)
self.lab2 = Label(frame,text = "密码:")
self.lab2.grid(row = 1,column = 0)
self.ent2 = Entry(frame,show = "*")
self.ent2.grid(row = 1,column = 1,sticky = W)
self.button = Button(frame,text = "登录",command = self.Submit)
self.button.grid(row = 2,column = 1,sticky = W)
self.lab3 = Label(frame,text = "")
self.lab3.grid(row = 3,column = 1,sticky = W)
self.button2 = Button(frame,text = "退出",command = frame.quit)
self.button2.grid(row = 2,column = 1,sticky = E)
def Submit(self):
s1 = self.ent1.get()
s2 = self.ent2.get()
if s1 == 'admin' and s2 == '123':
self.lab3["text"] = "登陆成功"
root.destroy()
import  stjy as mf

elif((s1.strip()=="" and s2.strip()==""))or ((s1.strip()=="" and s2.strip()=="")):
self.lab3["text"] ="用户名或密码不能为空"

else:
self.lab3["text"] = "用户名或密码错误!"
self.ent1.delete(0,len(s1))
self.ent2.delete(0,len(s2))

root = Tk()
root.title("用户登录")
app = Reg(root)
root.mainloop()

#stjy.py
# import tkinter as tkt
from tkinter import  *
from tkinter import Tk, Scrollbar, Frame,ttk
import tkinter
from tkinter.ttk import Treeview
import time
import db as sql
from tkinter import messagebox

MENU_ITEMS = [ '常用', '帮助']
MENU_CY_ITEMS = ['查看','录入','编辑','导出数据','exit']
MENU_HELP_ITEMS=['about','help']

def select_action():

frame=Frame(root)
frame.place(x=0, y=10)
# frame.grid(row=0,column=0)
#滚动条

scrollBar = tkinter.Scrollbar(frame)
scrollBar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# scrollBar.grid(row=0,column=1)
scrollBar_sp=tkinter.Scrollbar(frame,orient='horizontal')
# scrollBar_sp.pack(side=tkinter.RIGHT,fill=tkinter.X)
#Treeview组件,11列,显示表头,带垂直滚动条
tree = Treeview(frame,height=500,
columns=('c1', 'c2', 'c3', 'c4', 'c5', 'c6','c7','c8','c9','c10','c11'),
show="headings",
yscrollcommand=scrollBar.set,

#   xscrollcommand=scrollBar_sp.set
)

#设置每列宽度和对齐方式
tree.column('c1', width=20, anchor='center')
tree.column('c2', width=100, anchor='center')
tree.column('c3', width=100, anchor='center')
tree.column('c4', width=120, anchor='center')
tree.column('c5', width=100, anchor='center')
tree.column('c6', width=100, anchor='center')
tree.column('c7', width=100, anchor='center')
tree.column('c8', width=100, anchor='center')
tree.column('c9', width=100, anchor='center')
tree.column('c10', width=100, anchor='center')
tree.column('c11', width=100, anchor='center')

#设置每列表头标题文本
tree.heading('c1',text='序号')
tree.heading('c2', text='姓名')
tree.heading('c3', text='手机号')
tree.heading('c4', text='QQ')
tree.heading('c5', text='微信')
tree.heading('c6', text='提供分校')
tree.heading('c7', text='咨询科目')
tree.heading('c8',text='咨询来自')
tree.heading('c9',text='提供日期')
tree.heading('c10',text='提供人')
tree.heading('c11',text='备注')
tree.pack(side=tkinter.LEFT, fill=tkinter.Y)
def treeviewClick(event):
#获取行的索引值
iid=tree.identify_row(event.y)
xy=tree.identify_element(event.x,event.y)
s=tree.selection()
# print(iid,xy )
print(s)
pass
tree.bind('<Button-1>', treeviewClick)
#插入数据
res=sql.select_data()
#for i in range(len(PrinterPywin32.get_enumjobs())):
#     self.tree.insert("", "end", values=(i + 1, PrinterPywin32.get_enumjobs()[i]["Submitted"],
# PrinterPywin32.get_enumjobs()[i]["pPrinterName"],
# PrinterPywin32.get_enumjobs()[i]["JobId"],
# PrinterPywin32.get_enumjobs()[i]["Status"]))
# for i in range(len(res)):
# tree.insert('', i, values=[str(i)]*11)
std=[]
for idt,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note in res:
std.append((idt,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note))
for i in range(len(res)):
tree.insert("",i,values=(std[i][0],std[i][1],std[i][2],std[i][3],std[i][4],std[i][5],std[i][6],std[i][7],std[i][8],std[i][9],std[i][10]))

def insert_action():
def save_student():
#name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note)
user_name=ent_name.get()
phone=ent_phone.get()
qq=ent_qq.get()
weixin=ent_weixin.get()
cbl_fx.bind("<<ComboboxSelected>>")
fenxiao=cbl_fx.get()
cbl_km.bind("<<ComboboxSelected>>")
kemu=cbl_km.get()
comboxlist.bind("<<ComboboxSelected>>")
laizi=comboxlist.get()
riqi=ent_dt.get()
provider=ent_pr.get()
beizhu=tx.get()
try:
sql.insert_data(user_name,phone,qq,weixin,fenxiao,kemu,laizi,riqi,provider,beizhu)
messagebox.showinfo("info","保存成功")
except:
print("写入数据失败")
def cancel_student():
pass
ins_dat=Tk()
# ins_dat.geometry(400*400)
# ins_dat.geometry('400*400')

# ins_dat=Frame(ins_dat)
# ins_dat.place(x=0, y=10)
ins_dat.title('数据录入')
#(ins_dat, '数据录入')
# ins_dat.pack()
#'姓名','手机号','QQ','微信', '提供分校', '咨询科目','咨询来自','提供日期', '提供人', '备注'
lab_name   =Label(ins_dat,text='姓名:')
lab_phone  =Label(ins_dat,text='手机号:')
lab_qq     =Label(ins_dat,text='QQ:')
lab_wexin  =Label(ins_dat,text='微信:')
lab_fx     =Label(ins_dat,text='提供分校:')
lab_km     =Label(ins_dat,text='咨询科目:')
lab_lz     =Label(ins_dat,text='咨询来自:')
lab_dt     =Label(ins_dat,text='提供日期:')
lab_pr     =Label(ins_dat,text='提供人:')
lab_nt     =Label(ins_dat,text='备注:')

ent_name = Entry(ins_dat)
ent_phone=Entry(ins_dat)
ent_qq=Entry(ins_dat)
ent_weixin=Entry(ins_dat)
# ent_fx=Entry(ins_dat)
# ent_km=Entry(ins_dat)
# ent_lz=Entry(ins_dat)
comval_fx=tkinter.StringVar()
cbl_fx=ttk.Combobox(ins_dat,textvariable=comval_fx) #初ymf始化
cbl_fx["values"]=("西乡校区","布吉校区","车公庙校区","白石洲校区")
cbl_fx.current(0)

com_val = tkinter.StringVar()
cbl_km=ttk.Combobox(ins_dat,textvariable=com_val) #初始化
cbl_km["values"]=("提升学历","代办入户","会计考证","网络考试")
cbl_km.current(0)

comvalue = tkinter.StringVar()
comboxlist=ttk.Combobox(ins_dat,textvariable=comvalue) #初始化
comboxlist["values"]=("官网后台","在线调查后台","移动官网后台","地铁广告","百度金融"\
,"EC离线留言","离线宝","微信客服","PC网站-百度推广")
comboxlist.current(0)  #选择第一个

# now = time.strftime("%H:%M:%S")
# now_val=StringVar()
# now_val.set(now)

ent_dt=Entry(ins_dat)
ent_pr=Entry(ins_dat)
# ent_nt=Entry(ins_dat)
tx=Entry(ins_dat)
# tx=tkinter.Text(ins_dat,height=5)
btn = Button(ins_dat,text = '保存',command = save_student)
btn2 = Button(ins_dat,text = '取消',command = cancel_student)
lab_name.grid(row = 0,column = 0,sticky =W)

lab_phone.grid(row = 1,column = 0,sticky = W)
lab_qq.grid(row = 2,column = 0,sticky = W)
lab_wexin.grid(row = 3,column = 0,sticky = W)
lab_fx.grid(row = 4,column = 0,sticky = W)
lab_km.grid(row = 5,column = 0,sticky = W)
lab_lz.grid(row = 6,column = 0,sticky = W)
lab_dt.grid(row = 7,column = 0,sticky = W)
lab_pr.grid(row = 8,column = 0,sticky = W)
lab_nt.grid(row = 9,column = 0,sticky = W)

ent_name.grid(row = 0,column = 1,sticky = W)
ent_phone.grid(row = 1,column = 1,sticky = W)
ent_qq.grid(row = 2,column =1 ,sticky = W)
ent_weixin.grid(row =3 ,column = 1,sticky = W)
# ent_fx.grid(row =4 ,column = 1,sticky = W)
cbl_fx.grid(row=4,column=1,sticky=W)
# ent_km.grid(row =5 ,column = 1,sticky = W)
cbl_km.grid(row =5 ,column = 1,sticky = W)
# ent_lz.grid(row =6 ,column = 1,sticky = W)
comboxlist.grid(row=6,column=1,sticky=W)
ent_dt.grid(row =7 ,column = 1,sticky = W)
ent_pr.grid(row =8 ,column = 1,sticky = W)
# ent_nt.grid(row =9 ,column = 1,sticky = W)
tx.grid(row =9 ,column = 1,sticky = W)
btn.grid(row =10,column = 1,sticky = W)
btn2.grid(row =10,column = 2,sticky = W)

ins_dat.mainloop()
def delete_action():
pass
def edit_action():
def edit_fd_info():
std_id=ent_id.get()
res=sql.edit_data(std_id)
for idt,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note in res:
ent_name_ed.insert(0,name)
ent_phone_ed.insert(0,phone)
ent_qq_ed.insert(0,qq)
ent_weixin_ed.insert(0,weixin)
ent_fx_ed.insert(0,prid_school)
ent_km_ed.insert(0,cslt_course)
ent_lz_ed.insert(0,cslt_from)
ent_pr_ed.insert(0,provider)
ent_dt_ed.insert(0,dt)
ent_nt_ed.insert(0,note)
# sql.update_data(id,name,phone,qq,weixin,prid_school,cslt_course,cslt_from,dt,provider,note)
print(name,phone,weixin)

# print(res)
def save_info():
std_id=ent_id.get()
uname=ent_name_ed.get()
uphone=ent_phone_ed.get()
uqq=ent_qq_ed.get()
uweixin=ent_weixin_ed.get()
ufx=ent_fx_ed.get()
ukm=ent_km_ed.get()
ulz=ent_lz_ed.get()
upr=ent_pr_ed.get()
udt=ent_dt_ed.get()
ued=ent_nt_ed.get()

if(uname and uphone):
try:
sql.update_data(std_id,uname,uphone,uqq,uweixin,ufx,ukm,ulz,udt,upr,ued)
messagebox.showinfo("info","保存成功")
except:
messagebox.showerror("info","保存失败")
pass

print(uname,udt)
def del_info():
std_id=ent_id.get()
uname=ent_name_ed.get()
if(uname and std_id):
try:
sql.delete_data(std_id,uname)
messagebox.showinfo('infor','删除成功')
except Exception as e:
messagebox.showerror('info',e)
pass

edit_dat=Tk()
edit_dat.title("信息维护")
# edit_dat.geometry('','300*400')
lab_id=Label(edit_dat,text='请输入编辑ID:')
ent_id=Entry(edit_dat)
btn_fd=Button(edit_dat,text='查询',command=edit_fd_info)
lab_id.grid(row = 0,column = 0,sticky = W)
ent_id.grid(row = 0,column = 1,sticky = W)
btn_fd.grid(row = 0,column = 2,sticky = W)

# vl_name=StringVar()
lab_name   =Label(edit_dat,text='姓名:')
ent_name_ed=Entry(edit_dat,textvariable=edit_fd_info )
lab_name.grid(row = 2,column = 0,sticky = W)
ent_name_ed.grid(row = 2,column = 1,sticky = W)

# vl_phone=StringVar()
lab_phone  =Label(edit_dat,text='手机号:')
ent_phone_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_phone.grid(row = 3,column = 0,sticky = W)
ent_phone_ed.grid(row = 3,column = 1,sticky = W)

lab_qq_ed     =Label(edit_dat,text='QQ:')
ent_qq_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_qq_ed.grid(row = 4,column = 0,sticky = W)
ent_qq_ed.grid(row = 4,column = 1,sticky = W)

lab_wexin_ed  =Label(edit_dat,text='微信:')
ent_weixin_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_wexin_ed.grid(row = 5,column = 0,sticky = W)
ent_weixin_ed.grid(row = 5,column = 1,sticky = W)

# lab_fx_ed     =Label(edit_dat,text='提供分校:')
# ent_fx_ed=Entry(edit_dat)
# lab_fx_ed.grid(row=11,column=0,sticky=W)
# ent_fx_ed.grid(row=11,column=1,sticky=W)
lab_fx_ed  =Label(edit_dat,text='提供分校:')
ent_fx_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_fx_ed.grid(row = 6,column = 0,sticky = W)
ent_fx_ed.grid(row = 6,column = 1,sticky = W)

lab_km_ed     =Label(edit_dat,text='咨询科目:')
ent_km_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_km_ed.grid(row = 7,column = 0,sticky = W)
ent_km_ed.grid(row = 7,column = 1,sticky = W)

lab_lz_ed     =Label(edit_dat,text='咨询来自:')
ent_lz_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_lz_ed.grid(row = 8,column = 0,sticky = W)
ent_lz_ed.grid(row = 8,column = 1,sticky = W)

lab_dt_ed     =Label(edit_dat,text='提供日期:')
ent_dt_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_dt_ed.grid(row = 9,column = 0,sticky = W)
ent_dt_ed.grid(row = 9,column = 1,sticky = W)

lab_pr_ed     =Label(edit_dat,text='提供人:')
ent_pr_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_pr_ed.grid(row = 10,column= 0,sticky = W)
ent_pr_ed.grid(row = 10,column = 1,sticky = W)

lab_nt_ed     =Label(edit_dat,text='备注:')
ent_nt_ed=Entry(edit_dat,textvariable=edit_fd_info)
lab_nt_ed.grid(row = 12,column = 0,sticky = W)
ent_nt_ed.grid(row = 12,column = 1,sticky = W)
btn_sv=Button(edit_dat,text='保存',command=save_info)
btn_sv.grid(row=13,column=0)

btn_del=Button(edit_dat,text='删除',command=del_info)
btn_del.grid(row=13,column=1,sticky=W)

edit_dat.mainloop()
pass

def export_data():
def exp_dt():
import pandas as pd
# import openpyxl
path=ent_path.get()
# file_name=path+"abc.csv"
rs=pd.DataFrame(res,columns=('id','姓名','手机号','QQ','微信','提供分校','咨询科目',\
'咨询来自','提供日期','提供人','备注'))
rs.to_csv(path,index=True,header=True)
# print(rs)
# print(file_name)
# xlsx_file=pd.ExcelFile(file_name)
# x1=xlsx_file.parse(0)
# pd.DataFrame(res).to_excel("abc.xlsx",sheet_name="123",index=False,header=True)

exp_dat=Tk()
exp_dat.title("导出数据")
lab_path=Label(exp_dat,text='请输入导出路径:')
ent_path=Entry(exp_dat)
btn_exp=Button(exp_dat,text='导出',command=exp_dt)
lab_path.grid(row=0,column=0,sticky=W)
ent_path.grid(row=0,column=1,sticky=W)
btn_exp.grid(row=1,column=1,sticky=W)

res=sql.select_data()

def get_tk():
'''获取一个Tk对象'''
return Tk()

def set_tk_title(tk, title):
'''给窗口定义title'''
if title is not None and title != '':
tk.title(title)
else:
tk.title('xxx管理系统 v1.0')

def set_tk_geometry(tk, size):

3ff0
'''设置窗口大小,size的格式为:width x height,如:size = '200x100'.'''
if size is not None and size != '':
tk.geometry(size)
else:
tk.geometry('1024x600')
# tk.resizable(width=True,height=True) # 宽不可变 高可变  默认True
def get_menu(tk):
'''获取一个菜单条'''
return Menu(tk)

def menu_cy(menubar):
'''定义菜单 常用'''
#MENU_CY_ITEMS = ['查看','录入','编辑','删除','exit']
cymenu = Menu(menubar, tearoff=1)
cymenu.add_command(label=MENU_CY_ITEMS[0],command=select_action)
cymenu.add_command(label=MENU_CY_ITEMS[1],command=insert_action)
cymenu.add_command(label=MENU_CY_ITEMS[2],command=edit_action)
cymenu.add_command(label=MENU_CY_ITEMS[3],command=export_data)
cymenu.add_separator()
cymenu.add_command(label=MENU_CY_ITEMS[4],command=root.destroy)
menubar.add_cascade(label=MENU_ITEMS[0], menu=cymenu)

def meun_help(menber):
'''定义菜单Help'''
help_menu = Menu(menubar, tearoff=1)
help_menu.add_command(label=MENU_HELP_ITEMS[0])
help_menu.add_command(label=MENU_HELP_ITEMS[1])
menubar.add_cascade(label=MENU_ITEMS[1], menu=help_menu)

def init_menu_bar(menubar):
'''初始化菜单条'''
menu_cy(menubar)     #常用
meun_help(menubar)     #help
# menubar.add_cascade(label=MENU_ITEMS[-1], menu=meun_help)

#获得窗口对象

root = get_tk()
#设置窗口大小
set_tk_geometry(root, '')
#设置窗口title
set_tk_title(root, 'XXXXX信息管理系统v.1.0')
#获取菜单对象
menubar = get_menu(root)
#初始化菜单
init_menu_bar(menubar)
#加载菜单配置
root.config(menu=menubar)
# root.iconbitmap('D:\\Users\he_zh\\PycharmProjects\\stjx\\logo.bmp')
mainloop()

#     mainloop()
# def main():
#     #获得窗口对象
#     root = get_tk()
#     #设置窗口大小
#     set_tk_geometry(root, '')
#     #设置窗口title
#     set_tk_title(root, 'Python 3.3.2 Shell')
#     #获取菜单对象
#     menubar = get_menu(root)
#     #初始化菜
#     init_menu_bar(menubar)
#     #加载菜单配置
#     root.config(menu=menubar)

#     mainloop()

# if __name__ == "__main__":
#     main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python