tkinterでクリックされているボタンの参照方法がわかりません。クリックしたときにボタンIDを取得するにはどうすればよいですか?
マイコード:例えば今
for file in files:
btn = Button(root, text=file).pack()
ソースであるファイルから50個のボタンが生成されます。
しかし、いずれかのボタンをクリックすると、LASTボタンのみが参照されますが、実際に使用する/クリックしないボタンは参照されません。
私たちが実際にクリックしたオブジェクトを参照するにはthis
を使用しますが、このためにPythonでは解決策が見つかりませんでした。
from tkinter import *
root = Tk()
files = [] #creates list to replace your actual inputs for troubleshooting purposes
btn = [] #creates list to store the buttons ins
for i in range(50): #this just popultes a list as a replacement for your actual inputs for troubleshooting purposes
files.append("Button"+str(i))
for i in range(len(files)): #this says for *counter* in *however many elements there are in the list files*
#the below line creates a button and stores it in an array we can call later, it will print the value of it's own text by referencing itself from the list that the buttons are stored in
btn.append(Button(root, text=files[i], command=lambda c=i: print(btn[c].cget("text"))))
btn[i].pack() #this packs the buttons
root.mainloop()
だから何これが行うことは、ボタンのリストを作成され、各ボタンがlambda c=i: print(btn[c].cget("text")
でそれに割り当てられたコマンドがあります。
@EthanField質問にコードを追加しないでください。 OPが[tag:python-3.x]または 'files'のリストを使用していることはありません。わからない場合は、コメントを使用して説明を入手してください。 – Lafexlos
OPは既にコードを提供していましたが、私はそれを実行可能にしました。「Tkinter」と「tkinter」の違い以外には、2.xや3.xでコードが実行されることはありません。さらに、OPは 'file in file:'を宣言しました。つまり、ファイルは 'list'なので、OPは' files'のデータを提供していませんでしたが、forループを追加して50個のボタンOPはスクリプトに追加する必要があると述べた。私はまた、この質問を重複として分類することに同意しません.2つの質問は明らかに異なります。 –
@EthanField _OPがファイル内のファイルに対して宣言されました。つまり、ファイルはリストです.Umm ..いいえ、 'files'は任意の反復可能(ジェネレータ、アンプオブジェクト、ジップオブジェクトなど)、どのように生成されるのかはわかりません。重複について..リンクされた質問_exactly_はOPの説明をします。どのように重複していないのですか? – Lafexlos