Python GUI练习

来源:互联网 发布:网络营销策划的要素 编辑:程序博客网 时间:2024/06/04 17:55

这是一个小型的信息管理系统(不是通过数据库实现的)
主要是在此过程中重温了Ptyhon GUI设计的一些函数,以供以后参考用

import tkinterperson_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_listdef  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()            breakdef 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 resroot = 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()
0 0