Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. from tkinter import *
  2. from tkinter.filedialog import askopenfilename
  3. import shelve
  4.  
  5. root = Tk()
  6. shelvename = askopenfilename().split('.')[0]
  7.  
  8. root.title(shelvename.split('/')[-1])
  9. db = shelve.open(shelvename)
  10. rec = 0
  11. dbkeys = list(db.keys())
  12. record = db[dbkeys[rec]]
  13. fields = tuple(record.__dict__.keys())
  14. form = Frame(root)
  15. form.pack()
  16. global entries
  17. entries ={}
  18.  
  19. lab = Label(form, text="key")
  20. ent = Entry(form)
  21. lab.grid(row=0, sticky = E)
  22. ent.grid(row=0, column=1)
  23. entries['key'] = ent
  24.  
  25.  
  26. for (ix,label) in enumerate(fields):
  27. lab = Label(form, text=label)
  28. ent = Entry(form)
  29. lab.grid(row=ix+1, sticky = E)
  30. ent.grid(row=ix+1, column=1)
  31. entries[label] = ent
  32.  
  33. def ShowRec(char = ''):
  34. global rec
  35. dbkeys = list(db.keys())
  36. if char =='+':
  37. if rec<len(dbkeys)-1:
  38. rec+=1
  39. elif char == '-':
  40. if rec>0:
  41. rec-=1
  42.  
  43. record = db[dbkeys[rec]]
  44. fields = record.__dict__.keys()
  45. entries['key'].delete(0, END)
  46. entries['key'].insert(0,str(dbkeys[rec]))
  47. for label in fields:
  48. entries[label].delete(0, END)
  49. entries[label].insert(0,str(getattr(record, label)))
  50.  
  51. def updateRecord():
  52. key = entries['key'].get()
  53. if key in db:
  54. record = db[key]
  55. else:
  56. from person import Person
  57. record = Person(name='?', job='?')
  58. for field in fields:
  59. setattr(record, field, entries[field].get())
  60. db[key] = record
  61.  
  62. def deleteRecord():
  63. global rec
  64. key = entries['key'].get()
  65. del db[key]
  66. rec = 0
  67. ShowRec()
  68. def clearRec():
  69. record = db[dbkeys[rec]]
  70. fields = record.__dict__.keys()
  71. entries['key'].delete(0, END)
  72. for label in fields:
  73. entries[label].delete(0, END)
  74.  
  75. ShowRec()
  76. root.mainloop()
  77. db.close()
  78.  
  79. Button(root, text='<<', command = (lambda: ShowRec('-'))).pack(side=LEFT)
  80. Button(root, text='>>', command = (lambda: ShowRec('+'))).pack(side=RIGHT)
  81. Button(root, text='Update', command = (lambda: updateRecord())).pack(side=LEFT)
  82. Button(root, text='Delete', command = (lambda: deleteRecord())).pack(side=RIGHT)
  83. Button(root, text='Clear', command = (lambda: clearRec())).pack(fill=X)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement