由于使用到了上一篇博文所创建的数据,所以可以先回顾下:https://blog.csdn.net/eyeofeagle/article/details/86766141
python提供的gui编程库和java的gui类似,都是提供输入框,按钮,窗口等控件,来进行页面展示的控制
1,gui的几本组件:窗口,文本,按钮
window_label.py
#创建窗口: 显示文字,按钮,弹框
from tkinter import *
#显示文本内容
Label(text="hello world").pack()
#启动窗口
mainloop()
window_button.py
#窗口: 放入按钮
from tkinter import *
from tkinter.messagebox import showinfo
#1,获取窗口
window=Tk()
#2, 定义按钮
def reply():
showinfo(title="title1",message="按钮被点击")
button=Button(window,text="press this !", command=reply)
#3,启动窗口
button.pack()
window.mainloop()
2, gui几本组件:输入框(输入输出)
window_input.py
#设置输入框
from tkinter import *
from tkinter.messagebox import showinfo
#创建窗口
window=Tk()
window.title("输入输出")
window.iconbitmap("a.jpg")
#设置输入框
Label(window, text="输入name").pack()
ent=Entry(window)
ent.pack(side="top")
#创建提交按钮
def reply(name,window):
showinfo(title="reply", message="hello %s" %name)
window.quit()
btn=Button(window,text="submit", command=( lambda: reply(ent.get(),window ) ))
btn.pack(side="left")
#启动窗口
window.mainloop()
window_input2.py
#输入框
from tkinter import *
from tkinter.messagebox import showinfo,showerror
import shelve
#定义变量
shelve_file_name="../oop/data/shelve_obj"
db=shelve.open(shelve_file_name)
fieldnames=("name","age","job")
def fetchRecord():
key = entries["key"].get()#获取:输入key这个输入框的值
try:
record = db[key]
except:
showerror("title=error", message="no such key")
else:
for field in fieldnames:
ent=entries[field]
ent.delete(0, len(str(entries[field].get()) )) #输入框:删除原数据
entries[field].insert(0, getattr(record, field))# 输入框:设置正确数据
def updateRecord():
#取出db字典文件的值
db_key=entries['key'].get()
if db_key in db:
record=db[db_key]
else:
from chapter1.oop.class_obj import teacher
record=teacher(name="?",age="?")
#对象赋值
for field in fieldnames:
setattr(record,field, entries[field].get())
#保存数据
db[db_key]=record
#定义方法
def mkWidgets():
global entries
window=Tk()
window.title("people shelve")
form=Frame(window)
form.pack()
#遍历属性元组
entries={}
for (index, label) in enumerate(("key",)+fieldnames):
lab=Label(form, text=label)
ent=Entry(form)
lab.grid(row=index, column=0)
ent.grid(row=index, column=1)
print(index, label,ent)
entries[label]=ent #收集:所有的输入框对象, {key ,输入框}
#设置按钮
Button(window,text="fetch", command=fetchRecord).pack(side="left")
Button(window, text="update", command=updateRecord).pack(side="left")
Button(window, text="quit", command=window.quit()).pack(side="right")
return window
#创建窗口
window=mkWidgets()
window.mainloop()
db.close()
获取数据:
更新数据: