2016-04-02 13 views
-1

Ich habe einen Countdown-Timer mit keinen Bugs, aber es wird nicht gestartet. In der Shell heißt es nur: 'Prozess beendet mit Exitcode 0', aber es startet nicht.Gebaut Timer ohne Bugs - Wont starten (Python, tkinter)

Hier ist mein Code (Wenn es zu lange Kommentar und ich werde Pastebin hinzufügen):

import tkinter 

DEFAULT_GAP = 60 * 25 


class study_timer: 
    def __init__(self, master): 
     self.master = master 
     self.mainframe = tkinter.Frame(self.master, bg='white') 
     self.mainframe.pack(fill = tkinter.BOTH, expand=True) 

     self.timer_text = tkinter.StringVar() 
     self.timer_text.trace('w', self.build_timer) 
     self.time_left = tkinter.IntVar() 
     self.time_left.set(DEFAULT_GAP) 

     self.build_grid() 
     self.build_banner() 
     self.build_buttons() 
     self.build_timer() 

     self.update() 

    def build_grid(self): 
     self.mainframe.columnconfigure(0, weight=1) 
     self.mainframe.rowconfigure(0, weight=0) 
     self.mainframe.rowconfigure(0, weight=1) 
     self.mainframe.rowconfigure(0, weight=0) 

    def build_banner(self): 
     banner = tkinter.Label(
      self.mainframe, 
      bg='black', 
      text='TIMER', 
      fg='white', 
      font=('Ravie Regular', 30) 
     ) 
     banner.grid(
      row=0, column=0, 
      stick='ew', 
      padx=10, pady=10 
     ) 
    def build_buttons(self): 
     buttons_frame = tkinter.Frame(self.mainframe) 
     buttons_frame.grid(row=2, 
          column=0, 
          sticky='nsew', 
          padx=10, pady=10) 
     buttons_frame.columnconfigure(0, weight=1) 
     buttons_frame.columnconfigure(1,weight=1) 

     self.start_button = tkinter.Button(
      buttons_frame, 
      text='Start', 
      command= self.start_timer 
     ) 

     self.stop_button = tkinter.Button(
      buttons_frame, 
      text='Stop', 
      command=self.stop_timer 
     ) 


     self.start_button.grid(row=0, column=0, sticky='ew') 
     self.stop_button.grid(row=0, column=1, sticky='ew') 
     self.stop_button.config(state=tkinter.DISABLED) 

    def build_timer(self, *args): 
     timer = tkinter.Label(
      self.mainframe, 
      text=self.timer_text.get(), 
      font=('Helvetica', 36) 
     ) 
     timer.grid(row=1, column=0, sticky='nsew') 

    def start_timer(self): 
     self.time_left.set(DEFAULT_GAP) 
     self.running = True 
     self.stop_button.config(state=tkinter.NORMAL) 
     self.start_button.config(state=tkinter.DISABLED) 

    def stop_timer(self): 
     self.running = False 
     self.stop_button.config(state=tkinter.NORMAL) 
     self.start_button.config(state=tkinter.NORMAL) 

    def min_sec(self, seconds): 
     return int(seconds/60), int(seconds%60) 

    def update(self): 
     time_left = self.time_left.get() 

     if self.running and time_left: 
      minutes, seconds = self.min_sec(time_left) 
      self.time_left.set(time_left-1) 

     else: 
      self.stop_timer() 
      self.master.after(1000, self.update) 

     if __name__ == "__main__": 
      root = tkinter.Tk() 
      timer = study_timer(root) 
      root.mainloop() 
+0

Wenn Sie Python über die Befehlszeile mit diesem Skript ausführen, wird nichts passieren, weil es nur eine Klasse ist und kein Code, der tatsächlich etwas damit macht. –

Antwort

2

Sie benötigen darunter, zwei Einzüge zurück, den letzten Teil if __name__ == "__main__": und alles zu bewegen.

+0

Danke, dass ich das getan habe und folgendes erhalten: Zeile 94, in Update 'wenn self.running und time_left: AttributeError: 'study_timer' Objekt hat kein Attribut 'running'' –

+0

Nun, Sie rufen update vor start_timer, wo ist Sie erklären, dass Sie laufen. Vielleicht sollten Sie den Timer starten, bevor Sie update ausführen oder self.running = False in __init __() hinzufügen –

+0

Wo würde ich das Update ablegen? Ich entfernte self.updtae() und meine GUI funktionierte, aber es gab nur die Start- und Stopp-Taste und keinen Timer oder Countdown. Entschuldigung für alle Fragen, die ich neu in der Codierung bin! –