2016-12-15 8 views
1

ボタンから値を返すようにしよう:Tkinterのは:私はこのようなコードを持っている私の問題を解決する方法の見当がつかない

def f(x): 
    x=x.get() 
    y=x**2 
    z=x-1 

Mylist=[] 
x=Entry(master) 
cmd=lambda x=x : f(x) 
Button(master, text="Ok", command=cmd).pack() 

私は何をしたい

Mylist.append([y,z]) 
のようなものです

...私はクラスを使用することができることを知っているが、先生は私たちがそのプロジェクトのためのクラスを使用する必要はありません。また、私のプログラムのどこか

を私の結果を使用するためには、

ご存知ですか?

答えて

1

lambdaおよびreturn [y,z]の中でappend(f(x))f(x)に使用してください。そして、Entryの文字列をintまたはfloatに変換する必要があります。

import tkinter as tk 

# --- functions --- 

def f(x): 
    x = int(x.get()) # convert string to int (or float) 
    y = x**2 
    z = x-1 
    return [y, z] 

# --- main --- 

my_list = [] 

master = tk.Tk() 

e = tk.Entry(master) 
e.pack() 

cmd = lambda x=e:my_list.append(f(x)) 

tk.Button(master, text="Ok", command=cmd).pack() 

master.mainloop() 

print(my_list) 

あなたがラムダでxを変換することができ、その後、f(x)だけ数学の計算に

EDIT行うことができます:@として修正版をTadhgMcDonald-Jensenがコメントで指摘しました。

def f(x): 
    return [x**2, x-1] 

#cmd = lambda x=int(e.get()):my_list.append(f(x)) # wrong version 
cmd = lambda:my_list.append(f(int(e.get()))) # correect version 
+0

何あなたが実際に行うことはできません 'ラムダのx = INT(e.get())しない'それはあなたが、定義時に 'X'のデフォルト値を考え実行しているので、 'lambda x = e:my_list.append(f(int(e.get())))') 'を実行する必要がありますが、ラムダがこの時点で有用であるかどうかはわかりません。ライン機能。 –

+0

@ TadhgMcDonald-Jensenあなたが正しいです、私はこれを忘れて、私はこのコードをチェックしませんでした。 – furas

0

ボタンをクリックするとcmdが実行されることがわかっているので、実行したいものをリストに追加するなどして入れてください。これは、cmdlambdaに変更すること、またはこの機能をf(またはさらに難解なもの)に追加することを意味します。

2

ボタンにコマンドを取り付けるの全体のポイントは、質問に対する回答を実装することで、「私はボタンをクリックしたときに発生します何をすべきか?」。あなたのケースでは、答えは "私はそれをするには)エントリーウィジェットから値を取得する、b)新しい値を計算する、そしてc)それをリストに追加する"です。

だから、それを行う関数を書いて、ボタンからその関数を呼び出してください。この場合、ボタンと入力ウィジェットの間に1:1の関係があるため、ラムダは必要ありません。ラムダそのものには何も問題はありませんが、この場合は値を指定せずに複雑さが増すため、使用しないことをお勧めします。 ではなく、ラムダを使用すると、ブレークポイントを設定したり、ラムダ内に追加の機能を追加するのが難しいため、コードのデバッグやメンテナンスが容易になります。例えば

def f(x): 
    y=x**2 
    z=x-1 

def do_calculation(): 
    x_value = float(x.get()) 
    result = f(x_value) 
    my_list.append(result) 

... 
tk.Button(..., command=do_calculation) 
+2

'global'キーワードは、(' = 'で)変数を再割り当てするときにのみ必要です。読者に' my_list'がグローバル変数を参照していることを明確に記述しておけば、 :) –

+0

@ TadhgMcDonald-Jensen:ええ、私は 'グローバル'の使用に少しうんざりしていました。私はそれを修正します。 「グローバル」は厳密には必要ではないが、コードをもっと明白にするために、グローバルとしてマークすることが良いと思っていた。しかし、私がそれを使うなら、私は 'x 'のためにそれを使っていたはずです。 –

関連する問題