2016-10-13 5 views
-1

私はTkinterの学習練習として基本的な学習用時計を作ろうとしていますが、自己が定義されていないと言って実行しようとするとエラーが発生します。ここにエラーメッセージがあります。ここで自己は定義されていませんか?

Traceback (most recent call last): 
    File "productivityclock.py", line 6, in <module> 
     class gui(object): 
    File "productivityclock.py", line 113, in gui 
     while 0 < self.z: 
NameError: name 'self' is not defined 

は私のコードで誰かが私を助けることができれば、私は本当に感謝、感謝

from Tkinter import * 
import time 

root = Tk() 

class gui(object): 
def __init__(self, master): 

    self.frame = Frame(master) 
    self.frame.pack() 

    t_int = 0 
    b_int = 0 
    reps = 0 

    self.menu() 

    def menu(self): 
     self.button1 = Button(
     self.frame, text="Set Time", command = self.set_time) 
     self.button2 = Button(
     self.frame, text="Set Breaks", command = self.set_break) 
     self.button3 = Button(
     self.frame, text="Set Intervals", command = self.set_reps) 
     self.button4 = Button(
     self.frame, text="Start", command = self.timer) 
     self.button1.pack(side = LEFT) 
     self.button2.pack(side = LEFT) 
     self.button3.pack(side = LEFT) 
     self.button4.pack(side = LEFT) 

    def set_time(self): 
     self.button1.pack_forget() 
     self.button2.pack_forget() 
     self.button3.pack_forget() 
     self.button4.pack_forget() 

     self.l = Label(self.frame, text = "Enter the time of each study session (minutes)") 
     self.button = Button(
     self.frame, text="Get", command=self.on_button1) 
     self.entry = Entry(self.frame) 
     self.button.pack(side = RIGHT) 
     self.entry.pack(side = LEFT) 
     self.l.pack(side = LEFT) 

    def set_break(self): 
     self.button1.pack_forget() 
     self.button2.pack_forget() 
     self.button3.pack_forget() 
     self.button4.pack_forget() 

     self.l = Label(self.frame, text = "Enter the time of each break (minutes)") 
     self.button = Button(
     self.frame, text="Get", command=self.on_button2) 
     self.entry = Entry(self.frame) 
     self.button.pack(side = RIGHT) 
     self.entry.pack(side = LEFT) 
     self.l.pack(side = LEFT) 

    def set_reps(self): 
     self.button1.pack_forget() 
     self.button2.pack_forget() 
     self.button3.pack_forget() 
     self.button4.pack_forget() 

     self.l = Label(self.frame, text = "Enter the amount of study sessions (minutes)") 
     self.button = Button(
     self.frame, text="Get", command=self.on_button3) 
     self.entry = Entry(self.frame) 
     self.button.pack(side = RIGHT) 
     self.entry.pack(side = LEFT) 
     self.l.pack(side = LEFT) 

    def on_button1(self): 
     x = self.entry.get() 
     self.t_int = x 
     print self.t_int 

     self.button.pack_forget() 
     self.entry.pack_forget() 
     self.l.pack_forget() 

     self.menu() 

    def on_button2(self): 
     x = self.entry.get() 
     self.b_int = x 
     print self.b_int 

     self.button.pack_forget() 
     self.entry.pack_forget() 
     self.l.pack_forget() 

     self.menu() 

    def on_button3(self): 
     x = self.entry.get() 
     self.reps = x 
     print self.reps 

     self.button.pack_forget() 
     self.entry.pack_forget() 
     self.l.pack_forget() 

     self.menu() 

    def timer(self): 
     x = self.t_int 
     y = self.b_int 
     self.z = self.reps 


     while 0 < self.z: 
      while x > 0: 
       time.sleep(60) 
       n = Label(self.frame, text = "You have %r minutes left in your session") % x 
       n.pack(side = LEFT) 
       x = x - 1 
      n.pack_forget 
      while y > 0: 
       time.sleep(60) 
       self.e = Label(self.frame, text = "You have %r minutes left in your break") % y 
       self.e.pack(side = LEFT) 
       self.y = self.y - 1 
      self.e.pack_forget() 

      z = z - 1 
      x = self.t_int 
      y = self.b_int 


app = gui(root) 

root.mainloop() 
+9

私の推測では、インデントが正しくなく、ループが実際にはメソッド内にないと思います。 – kindall

+0

インデントは現在(まだ)間違っています( 'def _init__'は' class gui 'と同じインデントを持ちます)、SyntaxErrorにつながります。あなたのコードはマシン上で実行しているものとまったく同じ*であることを確認してください。 – Evert

+0

タブとスペースが混在しているためにインデントが混在している可能性があります。これはPython 2では有効ですが(Python 3では使用できません)。あなたのエディタはPythonが内部的に行うのとは違った幅でタブを使うかもしれないので、混在インデントを使うことは非常に悪い考えです。 Python 2では、[ - tコマンドラインフラグ](https://docs.python.org/2/using/cmdline.html#cmdoption-t)を使用してPythonを実行することで、混乱したインデントを警告することができます。 '-tt'を使ってエラーにしてください。 – Blckknght

答えて

0

はい、ライン113で、while 0 < self.z:は適切にインデントではなく、その下のすべての行。

関連する問題