2017-10-24 19 views
2

このコードを使用して、ボタンをクリックするとテキスト値を返すようにします。tkinterボタンにテキスト値を返させる方法

film = ['Woezel & Pip Op zoek naar de Sloddervos!', 'The White Snake', 
     'Proof of Life', 'Rise of the Planet of the Apes', 
     'Mona Lisa Smile', '2 Guns', 'Max Payne', 'De eetclub'] 

for item in film: 
    button = Button(master=aanbiederspage, text=item, 
        command=filmdatabase).pack() 
+0

どこに値を返すと思いますか? –

+0

関数 "filmdatabase"のように、ボタンのテキストをtxtファイルに書き込むことになります – Mruusi

+0

リストの最後に 'item'というボタンオブジェクトを作成していますか?私はあなたの質問を少し明確にする必要があると思います。 – Nae

答えて

3

これを実行するための簡単な方法は、commanditem文字列を渡すことです:それは次のようになりますコールバック、しかし、あなたはこれを行う方法を慎重にする必要があります。 1つの方法は、item文字列をlambda関数のデフォルトargにすることです。 lambdaが定義されている場合、itemがそのargにバインドされるように、デフォルトのargでなければなりません。 lambda : func(item)を実行した場合、すべてのボタンがリストの最後の項目を印刷します。これは、その場合、コールバックが呼び出されたときに、の現在のの値がPythonによって照合されるため、itemです。私のコードで私はbutton = tk.Button(を行いません方法

import tkinter as tk 

film = ['Woezel & Pip Op zoek naar de Sloddervos!', 'The White Snake', 
    'Proof of Life', 'Rise of the Planet of the Apes', 'Mona Lisa Smile', 
    '2 Guns', 'Max Payne', 'De eetclub'] 

def func(item): 
    print(item) 

root = tk.Tk() 

for item in film: 
    tk.Button(master=root, text=item, command=lambda s=item: func(s)).pack() 

root.mainloop() 

注...その割り当てを作るても意味がありません。第一に、私たちはどこでもそれらのウィジェットを保存していないが、より重要なのは、.pack戻りNoneは、そう

button = Button(master=aanbiederspage, text=item, command=filmdatabase).pack() 

が実際にbuttonNoneに、いないボタンのウィジェットに設定しますやって。

+0

これは非常に効果的です!どうもありがとうございました :) – Mruusi

-1

あなたは「filmdatabase」に引数を送信するためのコマンドでラムダを使用することができます。

for item in film: 
    button = Button(master=aanbiederspage, text=item, command= lambda: filmdatabase(item)).pack() 
+1

これは正しく動作しません。 –

+2

このコマンドを使用すると、リストフィルムの最後の値だけがファイルに書き込まれます。ボタンのテキストではありません。 – Mruusi

関連する問題