Python GUI练习

这是一个小型的信息管理系统(不是通过数据库实现的)
主要是在此过程中重温了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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值