from tkinter import * from linked_data import Chain, format_dict import pprint chain = Chain() chain.populate() root = Tk() root.title('dsp blockchain') view = Entry(root, width=35, borderwidth=5) view.grid(row=0, column=1, columnspan=3, padx=10, pady=10) accept_id = Entry(root, width=35, borderwidth=5) accept_id.grid(row=4, column=1, columnspan=3, padx=10, pady=10) accept_id.insert(0, 'contract') accept_status = StringVar(root) accept_status.set('False') # default value OptionMenu(root, accept_status, 'False', 'True').grid(row=4, column=4) def myClick(): chain.current_contract_state(int(view.get())) pprint.pprint(chain.state) def add_contract(): # add contract to the blockchain def add(): chain.new_contract(client.get(), contractor.get(), deadline.get(), description.get(), name.get(), int(price.get()), people.get().split(','), initiator.get()) # destroy add contract window, and print conformation newWindow.destroy() print('contract added') # make new window for adding the information for the contract newWindow = Toplevel(root) newWindow.title('Add contract') # create all text boxes Label(newWindow, text='The client: ').grid(row=0, column=0) client = Entry(newWindow, width=35, borderwidth=5) client.grid(row=0, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='The contractor: ').grid(row=1, column=0) contractor = Entry(newWindow, width=35, borderwidth=5) contractor.grid(row=1, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Deadline: ').grid(row=2, column=0) deadline = Entry(newWindow, width=35, borderwidth=5) deadline.grid(row=2, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Description: ').grid(row=3, column=0) description = Entry(newWindow, width=35, borderwidth=5) description.grid(row=3, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Project name: ').grid(row=4, column=0) name = Entry(newWindow, width=35, borderwidth=5) name.grid(row=4, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Price: ').grid(row=5, column=0) price = Entry(newWindow, width=35, borderwidth=5) price.grid(row=5, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='People involved: ').grid(row=6, column=0) people = Entry(newWindow, width=35, borderwidth=5) people.grid(row=6, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Initiator').grid(row=7, column=0) initiator = Entry(newWindow, width=35, borderwidth=5) initiator.grid(row=7, column=1, columnspan=3, padx=10, pady=10) # create the add contract button add_c = Button(newWindow, text = "Add contract", command=add) add_c.grid(row=8, column=0) def update(): def up(): chain.update_contract(int(iden.get()), term.get(), update_value.get(), name.get()) newWindow.destroy() print('update pending approval') newWindow = Toplevel(root) newWindow.title('Update terms') Label(newWindow, text='Contract id: ').grid(row=0, column=0) iden = Entry(newWindow, width=35, borderwidth=5) iden.grid(row=0, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Term: ').grid(row=1, column=0) term = Entry(newWindow, width=35, borderwidth=5) term.grid(row=1, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='New value: ').grid(row=2, column=0) update_value = Entry(newWindow, width=35, borderwidth=5) update_value.grid(row=2, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Name: ').grid(row=3, column=0) name = Entry(newWindow, width=35, borderwidth=5) name.grid(row=3, column=1, columnspan=3, padx=10, pady=10) Button(newWindow, text='Update', command=up).grid(row=4, column=0) def accept_update(): def accept_up(): c = comment.get() ans = awnser.get() if ans == 'False': ans = False else: ans = True if c == '': chain.accept_update(int(iden.get()), int(update_id.get()), ans, name.get()) else: chain.accept_update(int(iden.get()), int(update_id.get()), ans, name.get(), c) newWindow.destroy() newWindow = Toplevel(root) newWindow.title('Update terms') Label(newWindow, text='Contract id: ').grid(row=0, column=0) iden = Entry(newWindow, width=35, borderwidth=5) iden.grid(row=0, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Update id: ').grid(row=1, column=0) update_id = Entry(newWindow, width=35, borderwidth=5) update_id.grid(row=1, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Awnser ').grid(row=2, column=0) awnser = Entry(newWindow, width=35, borderwidth=5) awnser.grid(row=2, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Name: ').grid(row=3, column=0) name = Entry(newWindow, width=35, borderwidth=5) name.grid(row=3, column=1, columnspan=3, padx=10, pady=10) Label(newWindow, text='Comment optional: ').grid(row=3, column=0) comment = Entry(newWindow, width=35, borderwidth=5) comment.grid(row=3, column=1, columnspan=3, padx=10, pady=10) Button(newWindow, text='Update', command=accept_up).grid(row=4, column=0) def view_updates(): status =accept_status.get() if status == 'False': status = False else: status = True iden = int(accept_id.get()) if status == None: pprint.pprint(chain.retrieve_updates(iden)) else: pprint.pprint(chain.retrieve_updates(iden, status)) Button(root, text="View contract", command=myClick).grid(row=0, column=0) Button(root, text="New contract", command=add_contract).grid(row=1, column=0) Button(root, text="Update contract", command=update).grid(row=2, column=0) Button(root, text="Accept updates", command=accept_update).grid(row=3, column=0) Button(root, text="View pending updates", command=view_updates).grid(row=4, column=0) root.mainloop()