如何找到 python 中的 2 个日志数据和在 tkinter treeview 中添加的时间差

How to find time difference between 2 log data in python and adding in tkinter treeview

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

我不太确定你比较的是什么值,但我猜是上一次。

您可以使用relativedelta获取时差。

一开始,将两者都赋值currenttime = previoustime = datetime.datetime.now()。然后,当用户再次调用 update 时,分配 currenttime=datetime.datetime.now() 查找时差,在树视图中显示数据,然后更新 previoustime=currenttime

这是一个例子。

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()

根据 OP 的要求更新:

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) 
         ...