数据库的创建
conn = sqlite3.connect('student1.db')
"""
#在该数据库下创建学生信息表
conn.execute ('''CREATE TABLE StudentTable(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
StuId INTEGER NOT NULL,
NAME TEXT NOT NULL,
CLASS INT NOT NULL,
AGE INTEGER Not NULL);''')
print("Table created successfully");
基于界面的设计有增删改查四个选项
1 from tkinter import *
2 from tkinter import messagebox
3 from tkinter import filedialog
4 from PIL import Image,ImageTk
5 import tkinter
6 import sqlite3
7 #打开本地数据库用于存储用户信息
8 conn = sqlite3.connect('student1.db')
9 #主界面
10 root=Tk()
11 root.title("学生信息管理系统")
12 root.config(width=600)
13 root.config(height=600)
14
15 #添加窗口背景图片
16 canvas=tkinter.Canvas(root,
17 width=600, #指定Canvas组件的宽度
18 height=600, #指定Canvas组件的高度
19 bg='white' #指定Canvas组件的背景色
20 #im=tkinter.PhotoImage(file='img.gif') 使用PhotoImage打开图片
21 )
22 image=Image.open("F:\图片\python图片素材\爱心.jpg")
23 im=ImageTk.PhotoImage(image)
24
25 canvas.create_image(400,200,image=im) #使用creat_image将图片添加到Canvas
26 canvas.pack()
27 #创建顶级菜单及其下拉菜单
28 menubar=Menu(root)
29 filemenu=Menu(menubar,tearoff=False)
30 filemenu.add_command(label="增加",command=insert_stu)
31 filemenu.add_command(label="删除",command=delete_stu)#command接删除函数/下面接修改函数
32 filemenu.add_command(label="修改",command=change_stu)
33 filemenu.add_command(label="查询",command=sel_stu)
34
35 filemenu.add_separator()
36 filemenu.add_command(label="退出",command=root.destroy)
37 menubar.add_cascade(label="菜单",menu=filemenu)
38
39 #显示菜单
40 root.config(menu=menubar)
41
42 buttoninsert_stu=Button(root,text="录入学生信息",font=("微软雅黑 -20"),command=insert_stu)
43 #buttoninsert_stu.grid(row=2,column=0)由下面的代码将该代码覆盖,显示的是在界面上的位置
44 buttoninsert_stu.place(x=50,y=50,height=40,width=200)
45
46 buttondelete_stu=Button(root,text="删除学生信息",font=("微软雅黑 -20"),command=delete_stu)
47 #buttondelete_stu.grid(row=2,column=1)
48 buttondelete_stu.place(x=50,y=150,height=40,width=200)
49
50 buttonchange_stu=Button(root,text="修改学生信息",font=("微软雅黑 -20"),command=change_stu)
51 #buttonchange_stu.grid(row=4,column=0)
52 buttonchange_stu.place(x=50,y=250,height=40,width=200)
53
54 buttonsel_stu=Button(root,text="查询学生信息",font=("微软雅黑 -20"),command=sel_stu)
55 #buttonsel_stu.grid(row=4,column=1)
56 buttonsel_stu.place(x=50,y=350,height=40,width=200)
进入录入学生信息
代码:
1 #增加学生信息
2 def insert_stu(): #录入学生信息
3 root1=Tk()
4 root1.title("录入学生信息")
5 root1.config(width=600)
6 root1.config(height=600)
7
8
9
10
11
12
13 #创建关联字符变量
14 varName=StringVar(root1,value='')
15 varId=StringVar(root1,value='')
16 varClass=StringVar(root1,value='')
17 varAge=StringVar(root1,value='')
18 varNum=StringVar(root1,value='')
19
20 label=Label(root1,text="编号",font=("微软雅黑 -20"))
21 label.place(x=30,y=10,height=40,width=80)
22
23 #创建标签组件
24 label=Label(root1,text="姓名:",font=("微软雅黑 -20"))
25 #label.grid(row=0,sticky=E)
26 label.place(x=30,y=60,height=40,width=80)
27
28 label=Label(root1,text="学号:",font=("微软雅黑 -20"))
29 #label.grid(row=1,sticky=E)
30 label.place(x=30,y=110,height=40,width=80)
31
32
33 label=Label(root1,text="班级:",font=("微软雅黑 -20"))
34 #label.grid(row=2,sticky=E)
35 label.place(x=30,y=160,height=40,width=80)
36
37
38 label=Label(root1,text="年龄:",font=("微软雅黑 -20"))
39 #label.grid(row=3,sticky=E)
40 label.place(x=30,y=210,height=40,width=80)
41
42 #创建文本框组件,同时设置关联的变量
43 # 姓名entryName
44 # 学号entryId
45 # 班级entryClass
46 # 年龄entryAge
47 entryNum=Entry((root1),textvariable=varNum)
48 entryNum.place(x=120,y=10,height=40,width=200)
49
50 entryName=Entry((root1),textvariable=varName)
51 #entryName.grid(row=0,column=1,sticky=W)
52 entryName.place(x=120,y=60,height=40,width=200)
53
54 entryId=Entry((root1),textvariable=varId)
55 #entryId.grid(row=1,column=1,sticky=W)
56 entryId.place(x=120,y=110,height=40,width=200)
57
58 entryClass=Entry((root1),textvariable=varClass)
59 #entryClass.grid(row=2,column=1,sticky=W)
60 entryClass.place(x=120,y=160,height=40,width=200)
61
62 entryAge=Entry((root1),textvariable=varAge)
63 #entryAge.grid(row=3,column=1,sticky=W)
64 entryAge.place(x=120,y=210,height=40,width=200)
65
66
67 def buttonOK():
68 conn = sqlite3.connect('student1.db')
69 stu_num=eval(entryNum.get())
70 stu_id = eval(entryId.get())#学号输入
71 stu_name =str(entryName.get())#姓名录入
72 stu_class =eval(entryClass.get())#班级录入
73 stu_age=eval(entryAge.get())#年龄录入
74
75 cursor = conn.execute("SELECT * from StudentTable where StuId = '%s';"%stu_id)
76 conn.commit()
77 for row in cursor:
78 if stu_id == row[1]:
79 messagebox.showerror('警告',message='学号重复,请重新输入')
80 break
81 else:
82 try:
83
84 sql1 = "INSERT INTO StudentTable(ID,StuId,NAME,CLASS,AGE)"
85 sql1+="VALUES(%d,%d,'%s',%d,%d)"%(stu_num,stu_id,stu_name,stu_class,stu_age)
86 conn.execute(sql1)
87 conn.commit()
88 messagebox.showinfo(title='恭喜',message='录入成功!')
89 except:
90 messagebox.showerror('警告',message='未录入成功')
91
92
93
94
95
96 buttonbuttonOK=Button(root1,text="录入学生信息",font=("微软雅黑 -20"),command=buttonOK)
97 buttonbuttonOK.place(x=150,y=300,height=40,width=200)
98 def cancel():
99 varName.set('')
100 varId.set('')
101 varClass.set('')
102 varAge.set('')
103 varNum.set('')
104
105 #取消键
106 buttonCancel=Button(root1,text="取消",font=("微软雅黑 -20"),command=cancel)
107 buttonCancel.place(x=150,y=350,height=40,width=200)
108
109 #退出键
110 buttondel=Button(root1,text="退出",font=("微软雅黑 -20"),command=root1.destroy)
111 buttondel.place(x=150,y=400,height=40,width=200)
112 root1.mainloop()
113
114
115
116 #录入完成
在该部分在进行学生信息录入的时候运用if ...else....语句但在else后面的语句无法运行,在网上查资料也没找到。该部分代码还存在问题,有待将else后的语句为什么不能运行的问题弄清楚。
查询的操作
该部分代码如下:
1 #查询学生信息
2 def sel_stu():
3 root3=Tk()
4 root3.title("查询学生信息")
5 root3.config(width=600)
6 root3.config(height=600)
7
8
9
10
11 #创建关联变量
12 sId=StringVar(root3,value='')
13
14 #创建文本组件框\标签组件
15 label=Label(root3,text="学号",font=("微软雅黑 -20"))
16 label.place(x=30,y=10,height=40,width=80)
17
18 selId=Entry((root3),textvariable=sId)
19 selId.place(x=120,y=10,height=40,width=200)
20
21
22
23 def select():
24
25 #创建关联字符变量
26 varName=StringVar(root3,value='')
27 varId=StringVar(root3,value='')
28 varClass=StringVar(root3,value='')
29 varAge=StringVar(root3,value='')
30
31
32 conn = sqlite3.connect('student1.db')
33 stu_id = eval(selId.get())#学号输入
34 cursor = conn.execute("SELECT * from StudentTable where StuId = '%d';"%stu_id)
35 conn.commit()
36 for row in cursor:
37 if stu_id == row[1]:
38 stu_name=row[2]
39 stu_class=row[3]
40 stu_age=row[4]
41
42
43
44
45 #创建标签组件
46 label=Label(root3,text="姓名:",font=("微软雅黑 -20"))
47 #label.grid(row=0,sticky=E)
48 label.place(x=30,y=110,height=40,width=80)
49
50 label=Label(root3,text="学号:",font=("微软雅黑 -20"))
51 #label.grid(row=1,sticky=E)
52 label.place(x=30,y=160,height=40,width=80)
53
54
55 label=Label(root3,text="班级:",font=("微软雅黑 -20"))
56 #label.grid(row=2,sticky=E)
57 label.place(x=30,y=210,height=40,width=80)
58
59
60 label=Label(root3,text="年龄:",font=("微软雅黑 -20"))
61 #label.grid(row=3,sticky=E)
62 label.place(x=30,y=260,height=40,width=80)
63
64 #创建文本框组件,同时设置关联的变量
65 # 姓名entryName
66 # 学号entryId
67 # 班级entryClass
68 # 年龄entryAge
69
70 entryName=Entry((root3),textvariable=varName)
71 #entryName.grid(row=0,column=1,sticky=W)
72 entryName.place(x=120,y=110,height=40,width=200)
73
74 entryId=Entry((root3),textvariable=varId)
75 #entryId.grid(row=1,column=1,sticky=W)
76 entryId.place(x=120,y=160,height=40,width=200)
77
78 entryClass=Entry((root3),textvariable=varClass)
79 #entryClass.grid(row=2,column=1,sticky=W)
80 entryClass.place(x=120,y=210,height=40,width=200)
81
82 entryAge=Entry((root3),textvariable=varAge)
83 #entryAge.grid(row=3,column=1,sticky=W)
84 entryAge.place(x=120,y=260,height=40,width=200)
85
86 varName.set(stu_name)
87 varId.set(stu_id)
88 varClass.set(stu_class)
89 varAge.set(stu_age)
90
91 #查询键
92 buttonselect=Button(root3,text="查询",font=("微软雅黑 -20"),command=select)
93 buttonselect.place(x=200,y=60,height=40,width=100)
94
95 #取消键
96 def cancel():
97 sId.set('')
98
99 buttoncancel=Button(root3,text="取消",font="微软雅黑 -20",command=cancel)
100 buttoncancel.place(x=50,y=60,height=40,width=100)
101
102 #退出键
103 buttondel=Button(root3,text="退出",font="微软雅黑 -20",command=root3.destroy)
104 buttondel.place(x=350,y=60,height=40,width=100)
105 root3.mainloop()
106
107
108 #查询完成
删除的操作:
1 def delete_stu():
2 root2=Tk()
3 root2.title("删除学生信息")
4 root2.config(width=600)
5 root2.config(height=600)
6
7
8 #添加窗口背景图片
9
10
11
12 #创建标签
13 label=Label(root2,text="学号:",font=("微软雅黑 -20"))
14 #label.grid(row=1,sticky=E)
15 label.place(x=30,y=20,height=40,width=80)
16
17 entryId=Entry(root2)
18 entryId.place(x=120,y=20,height=40,width=200)
19
20 def delete():
21
22 conn = sqlite3.connect('student1.db')
23 stu_id = eval(entryId.get())#学号输入
24 cursor = conn.execute("SELECT * from StudentTable where StuId = '%s';"%stu_id)
25 conn.commit()
26
27 for row in cursor:
28 if stu_id == row[0]:
29 sql1 = "DELETE INTO StudentTable(ID,StuId,NAME,CLASS,AGE)"
30 sql1 += " VALUES(%d,%d,'%s',%d,%d);"%('','','','','')
31 conn.execute(sql1)
32 conn.commit()
33
34
35
36
37
38 #删除键
39 buttondelete=Button(root2,text="删除",font=("微软雅黑 -20"),command=delete)
40 buttondelete.place(x=150,y=160,height=40,width=200)
41
42 #退出键
43 buttondel=Button(root2,text="退出",font=("微软雅黑 -20"),command=root2.destroy)
44 buttondel.place(x=150,y=210,height=40,width=200)
45
46
47 root2.mainloop()
48 #删除完成
修改的操作:
1 #修改学生信息
2 def change_stu():
3 root4=Tk()
4 root4.title("修改学生信息")
5 root4.config(width=600)
6 root4.config(height=600)
7
8 #创建关联变量
9 sId=StringVar(root4,value='')
10
11 #创建文本组件框\标签组件
12 label=Label(root4,text="学号",font=("微软雅黑 -20"))
13 label.place(x=30,y=10,height=40,width=80)
14
15 selId=Entry((root4),textvariable=sId)
16 selId.place(x=120,y=10,height=40,width=200)
17
18
19
20 def select():
21
22 #创建关联字符变量
23 varName=StringVar(root4,value='')
24 varId=StringVar(root4,value='')
25 varClass=StringVar(root4,value='')
26 varAge=StringVar(root4,value='')
27
28
29 conn = sqlite3.connect('student1.db')
30 stu_id = eval(selId.get())#学号输入
31 cursor = conn.execute("SELECT * from StudentTable where StuId = '%s';"%stu_id)
32 conn.commit()
33 for row in cursor:
34 if stu_id == row[1]:
35
36 stu_name=row[2]
37 stu_class=row[3]
38 stu_age=row[4]
39
40
41
42
43 #创建标签组件
44 label=Label(root4,text="姓名:",font=("微软雅黑 -20"))
45 #label.grid(row=0,sticky=E)
46 label.place(x=30,y=110,height=40,width=80)
47
48 label=Label(root4,text="学号:",font=("微软雅黑 -20"))
49 #label.grid(row=1,sticky=E)
50 label.place(x=30,y=160,height=40,width=80)
51
52
53 label=Label(root4,text="班级:",font=("微软雅黑 -20"))
54 #label.grid(row=2,sticky=E)
55 label.place(x=30,y=210,height=40,width=80)
56
57
58 label=Label(root4,text="年龄:",font=("微软雅黑 -20"))
59 #label.grid(row=3,sticky=E)
60 label.place(x=30,y=260,height=40,width=80)
61
62 #创建文本框组件,同时设置关联的变量
63 # 姓名entryName
64 # 学号entryId
65 # 班级entryClass
66 # 年龄entryAge
67
68 entryName=Entry((root4),textvariable=varName)
69 #entryName.grid(row=0,column=1,sticky=W)
70 entryName.place(x=120,y=110,height=40,width=200)
71
72 entryId=Entry((root4),textvariable=varId)
73 #entryId.grid(row=1,column=1,sticky=W)
74 entryId.place(x=120,y=160,height=40,width=200)
75
76 entryClass=Entry((root4),textvariable=varClass)
77 #entryClass.grid(row=2,column=1,sticky=W)
78 entryClass.place(x=120,y=210,height=40,width=200)
79
80 entryAge=Entry((root4),textvariable=varAge)
81 #entryAge.grid(row=3,column=1,sticky=W)
82 entryAge.place(x=120,y=260,height=40,width=200)
83
84 varName.set(stu_name)
85 varId.set(stu_id)
86 varClass.set(stu_class)
87 varAge.set(stu_age)
88
89 def save():
90
91 conn = sqlite3.connect('student1.db')
92
93 stu_id=eval(entryId.get())
94 stu_name = entryName.get()#姓名录入
95 stu_class = entryClass.get()#班级录入
96 stu_age=entryAge.get()#年龄录入
97
98 sql1 = "UPDATE INTO StudentTable(StuId,NAME,CLASS,AGE)"
99 sql1 += "SET NAME=%s CLASS=%d AGE=%d WHERE StuId=%d"
100 arge=(stu_name,stu_class,stu_age,selId)
101 update(sql1,args)
102 conn.commit()
103 messagebox.showinfo(title='恭喜',message='录入成功!')
104
105
106
107 def cancel():
108 sId.set('')
109
110 #取消键
111 buttoncancel=Button(root4,text="取消",font="微软雅黑 -20",command=cancel)
112 buttoncancel.place(x=20,y=60,height=40,width=60)
113
114 #查询键
115 buttonselect=Button(root4,text="查询",font=("微软雅黑 -20"),command=select)
116 buttonselect.place(x=100,y=60,height=40,width=60)
117
118
119 #保存键
120 buttonsave=Button(root4,text="保存",font="微软雅黑 -20",command=save)
121 buttonsave.place(x=180,y=60,height=40,width=60)
122
123 #退出键
124 buttondel=Button(root4,text="退出",font="微软雅黑 -20",command=root4.destroy)
125 buttondel.place(x=260,y=60,height=40,width=60)
126
127
128
129 root4.mainloop()
在这些操作当中有些问题对于我这个学数学的外行来说还有待解决。
现在就是想搞懂if...else...语句当中
为什么else后的语句无法运行?
来源:oschina
链接:https://my.oschina.net/u/4275644/blog/4357569