also arbeite ich an einem rubic cube timer in python 3 (mit tkinter).bindung funktioniert nicht tkinter python3
Ich versuche, es zu machen, so dass, wenn Sie die Leertaste drücken, wird der Timer stoppt (ursprünglich habe ich versucht, diese zum Starten und Stoppen zu tun, aber ich fand es zu hart) Ich habe versucht, meinen die Leertaste zu binden Stopp-Funktion, aber es gibt entweder einen Fehler zurück (wenn ich einen Satz Klammern weggebe, nachdem ich die zu bindende Funktion benannt habe, denkt ich aus zwei dämlichen Gründen, dass ich 2 Argumente übergebe. IDK, warum das passiert) oder überhaupt nicht funktioniert. hier ist mein Code, Thx im Voraus für die Lösung.
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
print("fsddaewSDGNFHRAW") # a test to see if it works
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)
root.bind("<space>",sw.Stop()) # this is where i tried to bind
# if i did this:
#root.bind("<space>",sw.stop) it would say im passing 2 parameters instead of one (self)
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()
es funktioniert, vielen Dank für die Antwort –