---
Verfasst: Dienstag 19. Mai 2020, 05:44
-bitte löschen, Fehlpost-
Vielen Dank
Vielen Dank
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Trotzdem ein paar Anmerkungen: Du hast drei Arten von Import für Tk, wobei nur der zweite (falsche) verwendet wird. *-Importe sollte man nicht verwenden. Besser ist die dritte Variante, wo alle Namen per tk.xyz angesprochen werden.tom16092 hat geschrieben: Dienstag 19. Mai 2020, 05:44Guten Tag zusammen,
ich bastel gerade an einer Stoppuhr. Das hat soweit auch alles geklappt, leider habe ich immense Probleme mit Klassen in Python: Habe den Code nachdem er funktionierte in eine Klasse gepackt und es funktioniert nichts mehr. Kann mir jemand helfen mit der Zuordnung in der Klasse selber?
Meines Verständnisses nach muss man zunächst die __init__() aufrufen um der Klasse Grundlegende Informationen darzulegen. Dies nutze ich in diesem Fall für den Frame, also das Fenster was ich öffnen möchte, welches ich später durch die run() Funktion ausführe. Zuvor kommt in der timerfunc() die Berechnung der Zeit.
Der Code für die Zeitberechnung mag vielleicht ein bisschen komisch wirken, ist aber im Prinzip erstmal nur dazu da um zu funktionieren, mir geht es speziell um den Aufbau in der Klasse selber. Wäre super wenn mir da jemand helfen könnte
Tom
Code: Alles auswählen
Code: Alles auswählen
import time import tkinter from tkinter import * import tkinter as tk from time import sleep class Stoppuhr: def __init__(self): self.main = Tk() self.main.maxsize(320, 450) self.main.title('Stoppuhr') self.time_label = Label(self.main, text = '0:00', ) self.time_label.config(font=('Arial', 30)) self.entry = Entry(self.main, bd = 5, width = 5) self.start_button = Button(self.main, text = 'START', command = self.timerfunc) self.stop_button = Button(self.main, text = 'RES') self.entry.grid(row = 0, column = 0) self.time_label.grid(row = 0, column = 1) self.start_button.grid(row = 1, column = 0) self.stop_button.grid(row = 1, column = 1) self.timer_sec = 60 self.timer_min = int(self.entry.get()) def timerfunc(self): while timer_min != 0: timer_min = timer_min - 1 while timer_sec != 0: timer_sec = timer_sec - 1 sleep(1) if timer_sec >= 10: text = (str(timer_min) + ':' + str(timer_sec)) time_label['text'] = text time_label.update() else: text = (str(timer_min) + ':' + '0' + str(timer_sec)) time_label['text'] = text time_label.update() timer_sec = timer_sec + 60 def run(self): self.main.mainloop() Stoppuhr().run()
Code: Alles auswählen
import tkinter as tk
class Stoppuhr:
def __init__(self):
self.main = tk.Tk()
self.main.maxsize(320, 450)
self.main.title('Stoppuhr')
self.time_label = tk.Label(self.main, text='0:00', font=('Arial', 30))
self.time_label.grid(row=0, column=1)
self.entry = tk.Entry(self.main, bd=5, width=5)
self.entry.grid(row=0, column=0)
tk.Button(self.main, text='START', command=self.start_timer).grid(row=1, column=0)
tk.Button(self.main, text='RES').grid(row=1, column=1)
self.seconds = 0
def start_timer(self):
self.seconds = int(self.entry.get()) * 60
self.main.after(1000, self.tick)
def tick(self):
self.seconds -= 1
if self.seconds > 0:
self.main.after(1000, self.tick)
minutes, seconds = divmod(self.seconds, 60)
self.time_label['text'] = f"{minutes}:{seconds:02d}"
def run(self):
self.main.mainloop()
Stoppuhr().run()