2017-08-27 14 views
0

この場合、どのように同じクラスのメソッドを使いますか?私はそれが変更されるたびに更新されるtkinterスケールを作成しようとしています。この値をどうやって集めるのですか?python - グローバル名<function>は定義されていません

これは、例えば、コード

のスニペットで、

class Humidity(Page): 

    humidityValue = 0 

    def __init__(self, *args, **kwargs): 
     Page.__init__(self, *args, **kwargs) 
     container = tk.Frame(self) 
     container.pack(side="top", expand =True, fill = "both") 

     humidityScale = tk.Scale(container, from_=0, to=60, tickinterval=10, width= 30, 
          orient="horizontal", borderwidth = 0, highlightthickness= 0, length=800, command=set_humidity) 
     humidityLabel = tk.Label(container, text="Humidity(%)" , fg='White') 
     humidityScale.pack(side="top")        
     humidityScale.set(25)         #Sets humidity values to 25% 
     humidityLabel.pack(side="bottom") 
     humidityValue = humidityScale.get() 

    def get_humidity(self): 
     print self.humidityValue 

    def set_humidity(val): 
     humidityValue = val   

が言ってエラーを返します:グローバル名「set_humidityは」あなたはhumidityValue後ろself.を追加するのを忘れ

+0

のPythonでやっただけのように、関数の最初のパラメータとしてselfを追加するのを忘れ= Javaの。インスタンス変数*は明示的な参照を必要とします*、メソッドでは、これは* self *を通して行われますが、実際の名前はselfです。あなたは何でも好きなものを使うことができますが、常に*メソッドの最初の引数です。PythonのOOPチュートリアルに慣れるべきです。公式の[docs](https://docs.python.org/3/tutorial/classes.html)から始めると良いでしょう。また、Pythonでgetterやsetterを使用することは慣習ではありません。 –

+0

@ juanpa.arrivillagaありがとう、私はそれがJavaのようにそれについて考えるdefinitleyだった、区別は今明らかである。 – pam

+0

静的なクラス変数*を実際に作成しない限り、クラスレベルに 'humidityValue = 0'を入れてはいけません。しかし、あなたのコンストラクタでは 'self.humidityValue = 'に代入するので、クラス変数をインスタンス変数*でシャドーして無意味にします。後で微妙なバグにつながる可能性もあります。 –

答えて

0

が定義されていません。あなたの属性を宣言していたときに__init__

humidityValue = humidityScale.get()self.humidityValue = humidityScale.get()である必要があります。

これは、クラス内でクラスAND関数を使用して作成したオブジェクト(目撃したとおり)が属性を自己参照できるようにするために必要です。

おそらく、__init__(たとえばhumidityScalehumidityLabel)の他の変数と同じ変更を行う必要があります。あなたの関数set_humidityが動作しない理由に関しては


! - あなたはget_humidity

+0

@pam完全なトレースバックエラーを投稿できますか?好ましくは、あなたの質問 – TerryA

+0

@pamネヴァーマインドの本体に、私はそれはまだ私に同じエラー を与えるあなたのエラー – TerryA

+0

を見つけた私も、あなたが示唆したものをやって デフset_humidity(val)で試してみました: humidityValue = humidityScale.get()しかし、それは、humidityScaleがhumidityScale.get()のために定義されていないと言います。 – pam

関連する問題