Python Forum
[Tkinter] ClockIn/Out tkinter problem
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] ClockIn/Out tkinter problem
#3
Hey,
A couple of modifications- added the filename with the suffix .cvs, moved your entry and label into the make widgets method changed the timer update method to show the building of time. removed the lambda in the main. You have functions lambda is for lazy people that don't write functions( they have their place).
 
import tkinter as tk
import time
import datetime
from tkinter import Frame
from tkinter import *
import csv


class StopWatch(Frame):                                                                
    def __init__(self, parent=None, **kw):        
        Frame.__init__(self, parent, kw)
        self._start = 0.0        
        self._elapsedtime = 0.0
        self._running = 0
        self.timestr = StringVar()
        
        self.filename= 'work_clock.cvs'
        self.makeWidgets()
        

    def makeWidgets(self):                         
        """ Make the time label. """
        self.time_label = Label(self, textvariable=self.timestr)
        self._setTime(self._elapsedtime)
        self.time_label.pack(fill=X, expand=NO, pady=2, padx=2)
        
        self.label = tk.Label(self, text="Employee Name: ")
        self.label.pack(side="top")

        self.new = StringVar()
        self.e1 = Entry(self, textvariable=self.new)
        self.e1.pack()

    def _update(self): 
        """ Update the label with elapsed time. """
        
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)

    def _setTime(self, elap):
        """ Set the time string to Minutes:Seconds:Hundreths """
        
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)                
        #self.time_label.configure(text='%02d:%02d:%02d' % (minutes, seconds, hseconds))
        self.timestr.set('%02d:%02d:%02d' % (minutes, seconds, hseconds))

    def Start(self):                                                     
        """ Start the stopwatch, ignore if running. """
        if not self._running:            
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1        

    def Stop(self):                                    
        """ Stop the stopwatch, ignore if stopped. """
        if self._running:
            self.after_cancel(self._timer)            
            self._elapsedtime = time.time() - self._start    
            self._setTime(self._elapsedtime)
            self._running = 0

    def Reset(self):                                  
        """ Reset the stopwatch. """
        self._start = time.time()         
        self._elapsedtime = 0.0    
        self._setTime(self._elapsedtime)

    def clock_in(self):
        self.Start()                     
        data = self.e1.get()
        ClockIn_time = datetime.datetime.now()
        ClockIn_date = datetime.datetime.now().strftime('%Y-%m-%d')
        totalinput = [ data, ClockIn_time, ClockIn_date] 
        with open(self.filename, "a") as savedb:
            w = csv.writer(savedb)
            w.writerow(totalinput)

    def clock_out(self):
        self.Stop()                      
        data = self.e1.get()
        ClockOut_time = datetime.datetime.now()
        ClockOut_date = datetime.datetime.now().strftime('%Y-%m-%d')
        totalinput = [ data, ClockOut_time , ClockOut_date ] 
        with open(self.filename, "a") as savedb:
            w = csv.writer(savedb)
            w.writerow(totalinput)

def main():    
    root = Tk()
    sw = StopWatch(root)
    sw.pack(side=TOP)
    root.geometry("400x400")
    btn1 = Button(root, text='Clock In', command= sw.clock_in)
    btn1.pack(side=LEFT)
    btn2 = Button(root, text='Clock Out', command= sw.clock_out)
    btn2.pack(side=LEFT)
    btn3 = Button(root, text='Reset', command=sw.Reset)
    btn3.pack(side=LEFT)
    btn4 = Button(root, text='Quit', command=root.quit)
    btn4.pack(side=LEFT)
    root.mainloop()

if __name__ == '__main__':
    main()
Now what's left: 
this timer is only set up for 59 minutes which would be great if a job only lasted that long, so you'll need to add some hours but that shouldn't be to difficult. 
You may need a check to see if there's a name in the entry widget.
Maybe set up the cvs with columns and titles to make easy to read.
Clean up the data written to cvs so accounting doesn't need a CS to decipher it.
Reply


Messages In This Thread
ClockIn/Out tkinter problem - by Maryan - Oct-09-2020, 08:58 PM
RE: ClockIn/Out tkinter problem - by deanhystad - Oct-09-2020, 10:40 PM
RE: ClockIn/Out tkinter problem - by joe_momma - Oct-12-2020, 03:42 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Python3 tkinter radiobutton problem Nick_tkinter 14 6,080 Feb-15-2021, 11:01 PM
Last Post: Nick_tkinter
  tkinter python button position problem Nick_tkinter 3 3,580 Jan-31-2021, 05:15 AM
Last Post: deanhystad
  tkinter| listbox.insert problem Maryan 3 3,536 Sep-29-2020, 05:34 PM
Last Post: Yoriz
  Tkinter problem DPaul 6 4,165 May-28-2020, 03:40 PM
Last Post: DPaul
  [Tkinter] Tkinter - I have problem after import varaible or function from aGUI to script johnjh 2 2,609 Apr-17-2020, 08:12 PM
Last Post: johnjh
  [Tkinter] Problem with tkinter when creating .exe file Jan_97 2 4,620 Feb-27-2020, 05:17 PM
Last Post: Jan_97
  [Tkinter] Tkinter problem catlessness 1 2,068 Jan-15-2020, 05:17 AM
Last Post: Larz60+
  Problem with Submit button Tkinter Reldaing 2 3,675 Jan-05-2020, 01:58 AM
Last Post: balenaucigasa
  tkinter GUI, problem running seperate files fishglue 17 6,420 Oct-15-2019, 02:56 PM
Last Post: Denni
  [python] [Tkinter] Problem bidding combobox with np.array NEL 3 3,417 Aug-04-2019, 11:07 AM
Last Post: Yoriz

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020