Python:使用tkinter和shelve实现本地数据的简单存储、显示、查询、更新操作

#!/usr/bin/env python
# coding:UTF-8


"""
@version: python3.x
@author:曹新健
@contact: [email protected]
@software: PyCharm
@file: peoplegui.py
@time: 2018/9/29 20:56
"""


import shelve
from tkinter import *
from tkinter.messagebox import showerror


class Person():
    def __init__(self,name,age,pay=100,job="无业游民"):
        self.name = name
        self.age = age
        self.pay = pay
        self.job = job

shelveFile = 'person-shelve'
fields = ('name','age','pay','job')

def makeWidget():
    global entries
    entries = {}
    wd = Tk()
    wd.title("People Shelve")
    wd.iconbitmap('bank.ico') #程序目录下需要有bank.ico图片
    fr = Frame(wd)
    fr.pack()
    for (id,field) in enumerate(('key',) + fields):
        lb = Label(fr,text=field)
        en = Entry(fr)
        lb.grid(row=id,column=0)
        en.grid(row=id,column=1)
        entries[field] = en
    Button(wd,text="查询",command=fetchRecord).pack(side=LEFT)
    Button(wd, text="更新", command=updateRecord).pack(side=LEFT)
    Button(wd, text="退出", command=wd.quit).pack(side=RIGHT)
    return wd

def fetchRecord():
    key = entries['key'].get()
    try:
        record = db[key]
    except:
        showerror(title="错误",message="输入的键值不存在")
    else:
        for field in fields:
            entries[field].delete(0,END)
            entries[field].insert(0,repr(getattr(record,field)))

def updateRecord():
    key = entries['key'].get()
    try:
        record = db[key]
    except:
        #from person import Person
        record = Person('?','?')
    for field in fields:
        setattr(record,field,eval(entries[field].get()))
    db[key] = record

if __name__ == "__main__":
    with shelve.open(shelveFile) as db:
        window = makeWidget()
        window.mainloop()

 

你可能感兴趣的:(Python脚本编程,Python脚本编程)