Python Forum
stopwatch output to txt file - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: stopwatch output to txt file (/thread-11594.html)



stopwatch output to txt file - robertofreemano - Jul-17-2018

Hi,

I'm a Python NOOB and I have an idea of that I'm trying to do but struggling to achieve end goal. I've found code (online - can't find the URL anymore since I acquired example) and the code works fine... click START/STOP/RESET/QUIT.

I've added an APPEND to file line in the STOP button function; the idea is to capture the time in a text file. I think I may need to convert the time to a string and capture that, but I'm struggling to find an example that works for me.

I am using Python 3.6.5... code below:

try:
    # for Python2
    from Tkinter import *   ## notice capitalized T in Tkinter 
except ImportError:
    # for Python3
    from tkinter import *   ## notice lowercase 't' in tkinter here
    
import time

class StopWatch(Frame):  
    """ Implements a stop watch frame widget. """                                                                
    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.makeWidgets()      

    def makeWidgets(self):                         
        """ Make the time label. """
        l = Label(self, textvariable=self.timestr)
        self._setTime(self._elapsedtime)
        l.pack(fill=X, expand=NO, pady=2, padx=2)                      
    
    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.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

#-------MY CODE INSERT-------------------------------------------------------------
        # save file
        
        # convert to string
            example = time
            str(example)
            repr(example)
            f = open("C:\pytest\stopwatch_test.txt","a")
            f.write(example)
            f.close()
#--------------------------------------------------------------------

    
    def Reset(self):                                  
        """ Reset the stopwatch. """
        self._start = time.time()         
        self._elapsedtime = 0.0    
        self._setTime(self._elapsedtime)
        
        
def main():
    root = Tk()
    sw = StopWatch(root)
    sw.pack(side=TOP)
    
    Button(root, text='Start', command=sw.Start).pack(side=LEFT)
    Button(root, text='Stop', command=sw.Stop).pack(side=LEFT)
    Button(root, text='Reset', command=sw.Reset).pack(side=LEFT)
    Button(root, text='Quit', command=root.quit).pack(side=LEFT)
    
    root.mainloop()

if __name__ == '__main__':
    main()
I have tried a few things and keep coming back to self._elapsedtime & '%02d:%02d:%02d' % (minutes, seconds, hseconds))

Any help would be appreciated... in the meantime, I have just started an intro Python course on Pluralsight.com


RE: stopwatch output to txt file - buran - Jul-17-2018

replace your insert with
            with open("C:\pytest\stopwatch_test.txt","a") as f:
                f.write(time.ctime())



RE: stopwatch output to txt file - robertofreemano - Jul-17-2018

Hi buran,
Thank you for your prompt reply and suggestion.
I tried your code and it writes the 'system-time/date' instead of app output :(
I'm trying to capture Minutes:Seconds:Hundreths.

Thanks,
Roberto


RE: stopwatch output to txt file - gontajones - Jul-17-2018

Just write the self.timestr in your file, like @buran said.

ith open("C:\pytest\stopwatch_test.txt","a") as f:
    f.write(self.timestr)



RE: stopwatch output to txt file - robertofreemano - Jul-17-2018

Hi gontajones,
I get error: TypeError: write() argument must be str, not StringVar

Thanks for your reply though ;)


RE: stopwatch output to txt file - buran - Jul-17-2018

f.write(self.timestr.get())



RE: stopwatch output to txt file - robertofreemano - Jul-18-2018

Thanks Buran.... that did the trick!