2017-11-08 26 views
-1

私はtkinterを使ってゲームを作ろうとしていますので、クラスをフレームにして画面を変更できるようにしました... My class Jogoはゲームです。その中にカウントダウンされた時計。テスト用に作られた時計のコードは、クラスを使わずに動作します。メソッド内の変数が定義されていません

class Jogo(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     self.grid(row=0, column=0, sticky="nsew") 

     countVar = tk.StringVar() 
     self.after(1000, self.update_clock) 

     clock = tk.Label(self, textvariable=countVar) 
     clock.grid() 

    def update_clock(self, event = None): 
     for t in range(120, -1, -1): 
      mins, secs = divmod(t,60) 
      timeformat = "{:02d}:{:02d}".format(mins, secs) 
      countVar.set(timeformat) 
      clock.update_idletasks() 
      sleep(1) 

そして、私はクラスを使用せずに作られたコード:

しかし、私はゲームのコードに問題がそれを置くしようとしたときにここで私が修正するコードだ

NameError: name 'countVar' is not defined 

に表示されます

import tkinter 
from time import sleep 

main = tkinter.Tk() 
count = tkinter.StringVar() 
txt = tkinter.Label(main, textvariable=count) 
txt.grid() 

def update_txt(event = None): 
    for t in range(120, -1, -1): 
     mins, secs = divmod(t, 60) 
     timeformat = '{:02d}:{:02d}'.format(mins, secs) 
     count.set(timeformat) 
     txt.update_idletasks() 
     sleep(1) 

main.after(1000,update_txt) 
main.mainloop() 

答えて

1

これは、クラスがない例では、count変数がupdate_txt関数で使用できるスコープに含まれているためです。

クラスでは、update_clock関数は__init__で定義したcountVar変数にアクセスできません。別々に定義された2つの関数は、互いの変数にアクセスすることはできません。これはあなたの変数selfを使用するものです。このクラスのいずれかの関数に渡される最初の引数は、クラスのコピーであり、その名前にはselfという名前を付けます。

self.countVarと設定すると、update_clockにはself.countVarと表示されます。スコープはpythonでどのように機能するかについてもう少しあなたに表示されます

あなたは「パイソンLEGB」の検索を行うことに興味がある可能性があり、:、それはたくさん助けD

+0

ありがとうございます。私はそれを探します。 –

0

countVarは、どちらの方法でもローカル変数です。あなたのクラスの属性ではないため、__init__countVarを設定すると、countVarupdate_clockに完全に依存しません。

それselfでそれを設定することにより、属性行います

self.countVar = tk.StringVar() 

今、あなたはupdate_clockでそれにアクセスすることができます。

これはclock変数にも当てはまります。メソッド間で共有する必要があるものはすべて(の状態は)、selfに入れてください。

+0

感謝を...別の問題を得たがために今私はそれを自分で修正しようとします。 –

+0

@GabrielHenrique:助けになってうれしい! –

関連する問題