Seite 1 von 1

Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 13:31
von comeo
Hallo zusammen, dies ist mein erster Post hier in dem Forum:)

Ich bin auf der Suche nach einer Python Funktion die als eine Art paralele Stoppuhr oder auch Timer arbeitet.

Hier ist mal ein Beispielcode von mir:

Code: Alles auswählen

import time
import random
    
 i = 0
    
    while i < 7:
    
        timeDelay = random.randrange(30, 60)
        
        time.sleep(5)
        
        print(timeDelay)
        
        time.sleep(timeDelay)
        
        i += 1
        
        if i==6:
            break
Hierbei schläft das Programm einfach die Zeit zwischen 30 und 60 Sekunden. Nun will ich anstatt einem timeDelay folgendes:
Es soll wieder eine random Zahl generiert werden zwischen 30 und 60 beispielsweise (Sekunden). Nun soll solange diese Zeit nicht abgelaufen ist, weiterer Programmcode ausgeführt werden können.
Hat jemand eine Idee, wie ich das lösen könnte?
Ich arbeite zum ersten Mal mit Python und wäre sehr dankbar für jede Hilfe!

LG

Re: Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 13:40
von __deets__
Sowas geht zB mit asyncio. Da kannst du in Tasks "await asyncio.sleep(x)" aufrufen, und dann schlaeft dieser Task. Andere werden aber noch ausgefuehrt.

Dein obiges Problem ist ja so ziemlich sinnlos. Worum genau geht es denn?

Re: Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 14:34
von anonym13
Meine StopUhr:

from tkinter import *
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

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)
root.title("Stopuhr")

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='Exit', command=exit).pack(side=LEFT)

root.mainloop()

if __name__ == '__main__':
main()




from tkinter import *
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

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)
root.title("Stopuhr")

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='Exit', command=exit).pack(side=LEFT)

root.mainloop()

if __name__ == '__main__':
main()

Viel Spaß damit.

Re: Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 14:35
von __deets__
Bitte code-tags benutzen, so ist die nicht nutzbar/lesbar/verstehbar.

Re: Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 14:43
von Sirius3
@rexjohannes98: ein paar Anmerkungen zu Deinem Code.
Benutze keine *-Importe. Tkinter wird üblicherweise als `import tkinter as tk` eingebunden und alle Namen per tk.xy referenziert.
Namenskonvention ist unter Python für Module, Funktionen, Methoden und Variablennamen klein_mit_unterstrich.
`makeWidgets` sollte eigentlich direkt in __init__ stehen.
In `_setTime` solltest Du Ganzahl-Arithmetik // oder besser direkt divmod verwenden. `_setTime` ist dann auch eher `update_timestr` und da es immer mit self._elapsedtime aufgerufen wird, könnte man das Argument auch weglassen. Die Stringausgabe ist '%02d:%02d.%02d', sonst sieht es so aus, als ob man Stunden:Minuten:Sekunden hätte.
self._running ist ein Boolean, dafür gibt es True und False statt 1 und 0 in Python.
Statt `exit` (besser `sys.exit`) besser root.destroy verwenden.

Re: Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 14:49
von anonym13
danke,
bin noch etwas neuer in der Python Welt.

Re: Brauche eine Art Stoppuhr/Timer als Tool

Verfasst: Freitag 2. August 2019, 16:12
von comeo
Danke an alle, ich schau es mir an:)