from tkinter import Tk, Frame, Button, Label, Entry, ttk, StringVar, messagebox
import datetime
# Main Window
class WINDOW(Tk):
def __init__(self, master):
Tk.__init__(self, master)
self.master = master
frame1 = Frame1(self)
frame1.grid(row=0,column=0)
class Frame1(Frame):
def __init__(self, master):
Frame.__init__(self, master,height=master.winfo_screenheight(),
width=master.winfo_screenwidth())
self.master = master
var = StringVar()
label = Label(self, text="DATA", font=('calibre', 10, 'bold'))
entry = Entry(self, textvariable=var,width=10, font=('calibre', 10, 'normal'))
label.grid(row=0, column=1)
entry.grid(row=1, column=1)
# Log data sheet
NewTree = ttk.Treeview(self, height=23, columns=("Time","Time Diff", "DATA"))
NewTree['show'] = 'headings'
NewTree['columns'] = ("Time","Time Diff", "DATA")
NewTree.column("Time", width=180)
NewTree.column("Time Diff", width=150)
NewTree.column("DATA", width=150)
NewTree.heading("Time",text='TIME')
NewTree.heading("Time Diff",text='TimeDIfference')
NewTree.heading("DATA",text='DATA')
NewTree.grid(row=5, columnspan=4)
def insert_data():
if entry.get()=='':
messagebox.showerror("","Please insert data")
else:
NewTree.insert('', 'end',values=(datetime.datetime.now(),"",entry.get()))
entry.delete(0, 'end')
submit_button = Button(self, text="SUBMIT", command=insert_data)
submit_button.grid(row=3, column=4)
root = WINDOW(None)
root.geometry(f'{root.winfo_screenwidth()}x{root.winfo_screenheight()}')
root.title("ADD DATA")
root.mainloop()
Please refer the image: there is time difference between submitting the 11 and 12, 12 and 24 and so on. i need to calculate that time and want to add in time difference column.
it is like how much time it takes to add next data
I am not quite sure with what you are comparing the value, but my guess is the previous time.
you can use relativedelta
to get the time difference.
In the beginning, assign both currenttime = previoustime = datetime.datetime.now()
. Then when ever the user calls update
again assign currenttime=datetime.datetime.now()
find the time difference, display the data in the treeview and then update previoustime=currenttime
Here is an example.
from tkinter import ttk,Tk
import datetime
from dateutil.relativedelta import relativedelta
def diff(t_a, t_b):
t_diff = relativedelta(t_b, t_a)
return ' {h}h {m}m {s}s {ms}ms'.format(h=abs(t_diff.hours), m=abs(t_diff.minutes), s=abs(t_diff.seconds), ms=abs(round(t_diff.microseconds*0.001, 2)))
def update():
global currenttime, previoustime, timediff
currenttime= datetime.datetime.now()
timediff = diff(currenttime, previoustime)
curr = tree.insert('','end',values=(currenttime,timediff))
previoustime = currenttime
tree.selection_set(curr)
tree.see(curr)
root = Tk()
tree = ttk.Treeview(root, height = 20, columns = 2)
tree['show']='headings'
tree['columns'] = ('one','two')
tree.column('one', width = 250)
tree.column('two', width = 250)
tree.heading('one', text = 'TIME')
tree.heading('two', text = 'TIME Difference')
tree.grid(row = 0, column = 0)
currenttime= datetime.datetime.now()
previoustime= currenttime
timeBtn = ttk.Button(root, text='Update', command=update)
timeBtn.grid(row=1, column=0)
root.geometry("500x500")
root.mainloop()
Update after OP's request:
class Frame1(Frame):
def __init__(self, master):
...
NewTree.grid(row=5, columnspan=4)
self.currenttime = None
self.previoustime = None
self.timediff = None
def diff(t_a, t_b):
t_diff = relativedelta(t_b, t_a)
return ' {h}h {m}m {s}s {ms}ms'.format(h=abs(t_diff.hours), m=abs(t_diff.minutes), s=abs(t_diff.seconds), ms=abs(round(t_diff.microseconds*0.001, 2)))
def update_time():
if entry.get()=='':
messagebox.showerror("","Please insert data")
else:
self.currenttime= datetime.datetime.now()
if self.previoustime is None:
self.previoustime = self.currenttime
self.timediff = diff(self.currenttime, self.previoustime)
curr = NewTree.insert('','end',values=(datetime.datetime.now(), self.timediff ,entry.get()))
self.previoustime = self.currenttime
NewTree.selection_set(curr)
NewTree.see(curr)
submit_button = Button(self, text="SUBMIT", command=update_time)
...