質問

この種の質問が常に尋ねられることはわかっていますが、必要な答えに出会えなかったか、答えたときに理解できなかったかのどちらかです。

次のようなことができるようにしたいです:

spam = StringVar()
spam.set(aValue)
class MyScale(Scale):
    def __init__(self,var,*args,**kwargs):
        Scale.__init__(self,*args,**kwargs)
        self.bind("<ButtonRelease-1>",self.getValue)
        self.set(var.get())
    def getValue(self,event):
        ## spam gets changed to the new value set 
        ## by the user manipulating the scale
        var.set(self.get)
eggs = MyScale(spam,*args,**kwargs)
eggs.pack()

もちろん、「NameError:」が返されます。グローバル名「var」が定義されていません。」

getValue に引数を渡せない問題を回避するにはどうすればよいですか?グローバル変数を使用しないように警告されましたが、それが唯一の選択肢ですか?変更したい変数ごとに個別のスケール クラスを設定していますか?目の前にある何かが欠けているような気がする...

編集:これはどういう意味ですか?

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\...\interface.py", line 70, in getValue
    var.set(self.get)
NameError: global name 'var' is not defined

申し訳ありませんが、プログラミングを始めてまだ 1 か月しか経っていないため、専門用語の一部がまだ理解できません。

役に立ちましたか?

解決

この打撃を与えるしてください。

のコード例の多くはそこに寛大にあなたの「VAR」変数のように、グローバルを使用します。

私は、元のスパムオブジェクトへのポインタとして機能するためにあなたのvar引数を使用していました。 MyScaleクラス内self.var_pointerするために割り当てられます。

のコードは以下の規模のとButtonReleaseに(「卵」と「)スパム」の値を変更します。

あなたは、変更された値を参照してくださいeggs.get()またはspam.get()を入力して値をチェックアウトすることができます。

from Tkinter import *
root = Tk()

aValue = "5"
spam = StringVar()
spam.set(aValue)

class MyScale(Scale):
    def __init__(self,var,*args,**kwargs):
        self.var_pointer = var
        Scale.__init__(self,*args,**kwargs)
        self.bind("<ButtonRelease-1>",self.getValue)
        self.set(var.get())
    def getValue(self,event):
        ## spam gets changed to the new value set 
        ## by the user manipulating the scale
        self.var_pointer.set(self.get())

eggs = MyScale(spam)
eggs.pack(anchor=CENTER)

他のヒント

このメソッド関数を見てみましょう

    def getValue(self,event):
        ## spam gets changed to the new value set 
        ## by the user manipulating the scale
        var.set(self.get)

var.set(self.get) line には、使用可能なローカル変数が 2 つだけあります。

  • self
  • event

変数 var は、このメソッド関数に対してローカルではありません。おそらくクラスまたはスクリプトの他の場所で使用された可能性がありますが、ここではローカルではありません。

おそらくそれは世界的なものかもしれませんが、それは悪い習慣です。

なぜ変数だと考えるのかわかりません var この文脈では知られているでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top