問題
人のすべての連絡先の詳細を処理するアプリケーションを作成しています。レコードはテキスト ファイルに保存され、5 番目のインデックスから 10 番目のインデックスは、ユーザーが指定した各連絡先のニックネームで構成されます。これらすべてのニックネームのリストをボタンとして提供したいと思います。ユーザーがいずれかのボタンを選択すると、この連絡先の詳細が を使用して表示されtkSimpleDialog.showinfo('text','contact details')
ます。
ゴール
- ボタンのリストでどのボタンがクリックされたかを判断します。
- これは私がよく直面する問題です: パラメータをコールバック関数に渡すこと
コード
このコードは、私が実装したいことを達成していないことに注意してください。
buttons = []
inFile = open('test','r')
for i in inFile:
thisrecord = i
buttons.append(Button(self.frame,text='Name: %s' %i[5:10],command=self.show(thisrecord))
inFile.close()
私が試したこと
上記のコードを試してみると、どのボタンを押しても、ファイルに保存されている最後のレコードが毎回表示されました。そして、なぜこのようなことが起こったのかがわかりました。どうやらボタンはすべて一度に作成され、各ボタンが呼び出されるたびにコールバック関数が呼び出されます。
ボタンの数が限られている場合は、ボタンごとに関数を確実に定義して、それらをコールバックとして使用できます。これは、次のようなボタンを持つアプリケーションのウェルカム ページで行っていることadd new contact
ですsee details of contact
。
ただし、この場合、レコードの数は固定されていません。だから私はここで修正されており、何をすべきか理解していません。
さらに、チェック ボタンを使用してみました。これにより、ユーザーが見たいレコードにチェックを入れて押して続行できるようになりました。しかし、コードがそこを実行している間ではなく、チェックボタンが最初に作成されるため、これでも失敗しました。
この問題で私を助けてください。
スペック
Linux Mint 14
Python 2.7
tkinter 8.5