この場合、どのように同じクラスのメソッドを使いますか?私はそれが変更されるたびに更新される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.
を追加するのを忘れ
のPythonでやっただけのように、関数の最初のパラメータとして
self
を追加するのを忘れ= Javaの。インスタンス変数*は明示的な参照を必要とします*、メソッドでは、これは* self *を通して行われますが、実際の名前はselfです。あなたは何でも好きなものを使うことができますが、常に*メソッドの最初の引数です。PythonのOOPチュートリアルに慣れるべきです。公式の[docs](https://docs.python.org/3/tutorial/classes.html)から始めると良いでしょう。また、Pythonでgetterやsetterを使用することは慣習ではありません。 –@ juanpa.arrivillagaありがとう、私はそれがJavaのようにそれについて考えるdefinitleyだった、区別は今明らかである。 – pam
静的なクラス変数*を実際に作成しない限り、クラスレベルに 'humidityValue = 0'を入れてはいけません。しかし、あなたのコンストラクタでは 'self.humidityValue ='に代入するので、クラス変数をインスタンス変数*でシャドーして無意味にします。後で微妙なバグにつながる可能性もあります。 –