私はちょうどこの問題に出くわしました、そして今私は数時間の間、私を夢中にしています... 私はListbox
をいくつか持っています。 onSelected
という関数にバインドされた<<ListboxSelect>>
イベントをバインドします。Tkinter:「アクティブ」アイテムが更新される前にスローされた<< ListboxSelect >>イベントですか?
この関数は、選択された項目を印刷する必要がありますが、ここに問題があります。新しいアクティブアイテムを最後に印刷します。
ここだが、一例である:
アイテム1-アイテム2-アイテム1-アイテム2-アイテム1
をし、この: 私は2つのアイテム、アイテム1とアイテム2を持って、私は次の順序でそれらを選択します
:出力されますアイテム1-アイテム1アイテム2--アイテム1アイテム2-
明らかに最初のものが動作しますが、そこからは、「アクティブな」アイテムが更新される前にイベントがスローされ、最後の「アクティブな」アイテムが出力されるようです。明らかに、同じアイテムを2回クリックすると、意図したとおりに動作します。
回避策はありますか?リストボックスがupdate_idletasks()
で更新されるのを待ってみましたが、問題は解決しませんでした。 ここで何ができますか?
ありがとうございます!
EDIT:
誰かが...コードを求めた:第二の印刷は、常に最初のもの以外はFalseであること
self.phase = tk.Listbox(self, exportselection = False, selectmode='single')
self.phase.bind('<<ListboxSelect>>', self.onselect)
def onselect(self, evt):
print(self.phase.get('active'))
print(self.phase.select_includes(self.phase.index('active')))
注意。
'<< ListboxSelect >>'イベントは、選択が変更されるまで発生しません。そのイベントにバインドされたハンドラから 'curselection'を呼び出すと、常に現在選択されている項目が取得されます。 –
それはなぜ私が2番目の印刷行にFalseを得ているのかを説明するはずです。私は 'curselection'から' get( 'active') 'ではなくactiveアイテムを取得しようとします。 –