2016-04-02 11 views
-1

Hata olmadan geri sayım zamanlayıcısı yaptım, ancak başlatılamayacak. Kabukta şöyle diyor: 'Süreç, çıkış kodu 0' ile bitti, ancak başlatmıyor. (Onun çok uzun açıklama ve ben pastebin katacak olursa)Hata yapmadan dahili zamanlayıcı - Başlamadan başlama (Python, tkinter)

İşte benim kod:

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

komut dizisinden bu komut dosyasıyla çalıştırırsanız, hiçbir şey olmayacaktır çünkü bu yalnızca bir sınıf ve aslında onunla herhangi bir şey yapan kod içermez. –

cevap

2

geri, bunun altında iki girintiler son bölümünü if __name__ == "__main__": ve her şeyi taşımanız gerekir.

+0

Teşekkür ettim ve şu satırı aldım: line 94, update 'de eğer self.running ve time_left: AttributeError: 'study_timer' nesnesinin 'running'' özniteliği yok –

+0

Start_timer'den önce güncellemeyi çağırıyorsunuz. koşmayı ilan ettin. Güncellemeyi çalıştırmadan önce zamanlayıcıyı başlatmanız gerekebilir veya self.running = False uygulamasında __init __() –

+0

Güncelleştirmeyi nereye koyabilirim? Ben self.updtae() kaldırıldı ve benim gui çalıştı ama sadece başlangıç ​​ve durdurma düğmesi ve hiçbir zamanlayıcı veya geri sayım yoktu. Tüm sorularım için özür dilerim, kodlamada yeniyim! –