2016-08-03 15 views
2

ボタンを使用して値を返そうとしていますが、動作させることができません。私が望むのは、後で関数が使用されたかどうかをチェックするために使用できる値を返すボタンです。私が使用しているコードは以下の通りです:ボタンを使用した戻り値

from Tkinter import * 
master = Tk() 
master.geometry("200x100") 
def bla(): 
    return 1 
Button(master, command = bla, text = 'OK').pack() 

if bla == 1: 
    print('1') 

mainloop() 

また、私は、この使用してラムダを行うことを試みたが、私はあまりにもその1を見つけ出すことができませんでした。

答えて

2

このリンクhttps://stackoverflow.com/a/11907627/3110529をご覧ください。問題が解決しています。

主な懸念事項は、コールバックがイベントに応答して発生する動作になるように設計されているため、値を返すことが完全に意味をなさないことです。あなたのプログラムでは、あなたは、関数ポインタ(または参照?)それは明らかになることはありません1に等しい場合は、求めている

if bla == 1: print('1')

言うとき。

これをカバーするためにグローバル変数を使用する(つまり、変数を保存してコールバックに値を設定する)ことができますが、これは一般的に悪い習慣とみなされます。その代わりに、リンクのように、メンバー変数を使用してより効率的にコールバックの結果とレスポンスを格納するクラスに変換してみてください。

+1

これは実際に私が書いた答えよりも優れています。ここで、私のupvoteを持っています。 – Readme

1

あなたの問題は、戻り値bla()を保存していません。

あなたはグローバル変数を使用してこれを行うことができます。

from Tkinter import * 
master = Tk() 
master.geometry("200x100") 

gloBla = 0 
def bla(): 
    global gloBla 
    gloBla = 1 
Button(master, command = bla, text = 'OK').pack() 


mainloop() 

if gloBla == 1: 
    print('1') 
0

Tknitterドキュメントhttp://effbot.org/tkinterbook/variable.htmを1として、あなたはBooleanVarStringVarまたはIntVarを使用することができます。グローバル変数として機能します。この花瓶でVariableボタンをクリックするたびに変更されます。

from Tkinter import * 
master = Tk() 
Variable = BooleanVar() 
Variable.set(False) 

app = Frame(master, borderwidth=10).grid() 

def bla(): 
    print("1") 
    if Variable.get() == 0:Variable.set(True) 
    else:Variable.set(False) 
    print("current state of Variable: {0} ".format(Variable.get())) 

button1= Button(app, text = "Click Me",command=lambda:bla()).grid() 

mainloop() 

lambda:コマンドは、関数が起動時に呼び出されていないことを確認してください。

関連する問題