这是一个小型的信息管理系统(不是通过数据库实现的)
主要是在此过程中重温了Python GUI设计的一些函数,以供以后参考用
import tkinter
person_list = []
def ok_func():
name = name_entry.get()
sex = sex_entry.get()
age = age_entry.get()
bloodtype = bloodtype_entry.get()
constellation = constellation_entry.get()
height = height_entry.get()
weight = weight_entry.get()
if name != '' and sex != '' and age != '' and bloodtype != '' and constellation != '' and height != '' and weight != '':
add_person(Person(name, sex, age, bloodtype, constellation, height, weight))
clear_func()
else:
report_err()
def search_func():
name = name_entry.get()
sex = sex_entry.get()
age = age_entry.get()
bloodtype = bloodtype_entry.get()
constellation = constellation_entry.get()
height = height_entry.get()
weight = weight_entry.get()
r = find_from_list(Person(name, sex, age, bloodtype, constellation, height, weight))
if len(r) == 0:
s = '未找到符合条件的数据'
else:
s = ''
for p in r:
s += p.info()
s += '\n'
result_text.delete(0.0,tkinter.END)
result_text.insert(0.0,s)
def find_from_list (p):
global person_list
result_list = []
for i in range(0,len(person_list)):
if person_list[i].is_equal(p):
result_list.append(person_list[i])
return result_list
def clear_func():
name_entry.delete(0,100)
sex_entry.delete(0,100)
age_entry.delete(0,100)
bloodtype_entry.delete(0,100)
constellation_entry.delete(0,100)
height_entry.delete(0,100)
weight_entry.delete(0,100)
result_text.delete(0.0,tkinter.END)
def read_data():
f = open('inputfile.txt','r')
slist = f.readlines()
f.close()
for s in slist:
s = s.replace('\n','')
tl = s.split(' ')
if len(tl) == 7:
add_person(Person(tl[0], tl[1], tl[2], tl[3], tl[4], tl[5], tl[6]))
else:
report_err()
break
def data_output():
f = open('outputfile.txt','w')
for p in person_list:
f.write(p.info()+'\n')
f.close()
def report_err():
tkinter.messagebox.askokcancel('错误','关键信息缺失')
def add_person(p):
global person_list
person_list.append(p)
def backspace_func(e):
e.delete(len(e.get())-1)
class Person:
def __init__ (self, name, sex, age, bloodtype, constellation, height, weight ):
self.name = name
self.sex = sex
self.age = age
self.bloodtype = bloodtype
self.constellation = constellation
self.height = height
self.weight = weight
def info(self):
return 'name:'+str(self.name)+' sex:'+str(self.sex)+' age:'+str(self.age)\
+' bloodtype:'+str(self.bloodtype) +' constellation:'+str(self.constellation)\
+' height:'+str(self.height)+' weight:'+str(self.weight)
def is_equal(self,p):
res = True
if p.name != '' and self.name != p.name:
res = False
if p.sex != '' and self.sex != p.sex:
res = False
if p.age != '' and self.age != p.age:
res = False
if p.bloodtype != '' and self.bloodtype != p.bloodtype:
res = False
if p.constellation != '' and self.constellation != p.constellation:
res = False
if p.height != '' and self.height != p.height:
res = False
if p.weight != '' and self.weight != p.weight:
res = False
return res
root = tkinter.Tk()
root.geometry('600x500')
frame1 = tkinter.Frame(root)
frame2 = tkinter.Frame(root)
root.title("信息录入与查找系统")
name_label = tkinter.Label(frame1,text="姓名")
sex_label = tkinter.Label(frame1,text="性别")
age_label = tkinter.Label(frame1,text="年龄")
bloodtype_label = tkinter.Label(frame1,text="血型")
constellation_label = tkinter.Label(frame1,text="星座")
height_label = tkinter.Label(frame1,text="身高")
weight_label = tkinter.Label(frame1,text="体重")
name_entry = tkinter.Entry(frame1)
sex_entry = tkinter.Entry(frame1)
age_entry = tkinter.Entry(frame1)
bloodtype_entry = tkinter.Entry(frame1)
constellation_entry = tkinter.Entry(frame1)
height_entry = tkinter.Entry(frame1)
weight_entry = tkinter.Entry(frame1)
result_text = tkinter.Text(frame2,height=20,width = 100)
name_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(name_entry))
sex_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(sex_entry))
age_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(age_entry))
bloodtype_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(bloodtype_entry))
constellation_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(constellation_entry))
height_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(height_entry))
weight_backspace = tkinter.Button(frame1,text="退格",command=lambda:backspace_func(weight_entry))
ok_button = tkinter.Button(frame1,text="确定",command=lambda:ok_func())
search_button = tkinter.Button(frame1,text="查找",command=lambda:search_func())
clear_button = tkinter.Button(frame1,text="清除",command=lambda:clear_func())
filein_button = tkinter.Button(frame1,text="文件输入",command=lambda:read_data())
fileout_button = tkinter.Button(frame1,text="文件导出",command=lambda:data_output())
#设置布局
name_label.grid(row=0,column = 0)
name_entry.grid(row=0,column=1)
name_backspace.grid(row=0,column=2)
sex_label.grid(row=1,column = 0)
sex_entry.grid(row=1,column=1)
sex_backspace.grid(row=1,column=2)
age_label.grid(row=2,column = 0)
age_entry.grid(row=2,column=1)
age_backspace.grid(row=2,column=2)
bloodtype_label.grid(row=3,column = 0)
bloodtype_entry.grid(row=3,column=1)
bloodtype_backspace.grid(row=3,column=2)
constellation_label.grid(row=4,column = 0)
constellation_entry.grid(row=4,column=1)
constellation_backspace.grid(row=4,column=2)
height_label.grid(row=5,column = 0)
height_entry.grid(row=5,column=1)
height_backspace.grid(row=5,column=2)
weight_label.grid(row=6,column = 0)
weight_entry.grid(row=6,column=1)
weight_backspace.grid(row=6,column=2)
ok_button.grid(row=7,column=0)
clear_button.grid(row=7,column=2)
filein_button.grid(row=8,column=0)
fileout_button.grid(row=8,column=1)
result_text.grid(row=9,column=2)
frame1.pack()
frame2.pack()
root.mainloop()