2012-10-27 151 views
7

戻り値はどのようにして得られますか?私は途中でクラスを使用していません。python tkinterコマンドで使用されている関数からの戻り値

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

答えて

3

あなたはbutton関数内からC.setを呼び出すことができます。

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

短い答え:あなたはできませんが。コールバックは何も返すことができません。何も返さないからです。戻り値で何もしないイベントループは例外です。

イベントベースのアプリケーションでは、通常、クラスに属性を設定します。また、初心者ならば、グローバル変数を設定することもできます。グローバル変数を使用することは、時間の経過とともに維持されなければならない実際のコードにとっては良い考えではありませんが、実験では問題ありません。

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

はそれだけで世界を簡単に宣言しています:Cはあなたの例では、グローバル変数のように見えるので、

したがって、たとえば、あなたのような何かをするだろう。

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

多くの回答がグローバル変数を提案しました。私は自分のプロジェクトであまりにも多くのグローバル変数を使用するのが好きではないので、ここで私の解決策です。

Tkinterボタンを宣言するときに、ラムダ関数をコマンドとして使用できます。このラムダは、定義しているボタンと同じ名前空間内にある変数と対話できます。ボタンを初期化する前に必ずこの変数を定義してください。

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

あなたのプロジェクト組織に依存buttonの引数としてselfを持っている必要があるかもしれませんが、考え方は同じです。ラムダコマンドは、引数をボタンコマンドに渡す場合にも便利です。

関連する問題