2016-12-28 3 views
0
l1=Listbox() 
l1.pack(side=LEFT) 
l1.insert(END, *xrange(1,4)) 

l2=Listbox() 
l2.pack(side=RIGHT) 
l2.insert(END, *'abc') 

、アンダースコアは、他のリストボックスにジャンプするが、私はアップ/ダウンの矢印を使用して起動したときに、カーソルだけで参加する移動します。タブを押す際に、アンダースコアといっしょにホップすることは可能ですか?押すとタブが「アクティブ」は下線が、私はタブを押すとないカーソルは

編集:これは、アクティブな項目にselect_set()メソッドを呼び出すために、Tabキーを結合することによって行われる。

l1.bind('<Tab>', lambda e: l2.select_set(l2.index(ACTIVE))) 
l2.bind('<Tab>', lambda e: l1.select_set(l1.index(ACTIVE))) 
  • l.index(ACTIVE)を活性の指標を返します項目は、Tabキーを押した後にアンダースコアを含むものです。

  • これはl.select_set()を使用して「選択」に設定され、カーソルも同様に移動します。

  • ここでは何も使用されていませんが、tkinterバインドから呼び出された関数には暗黙的にイベントオブジェクトが与えられているため、ラムダ後の "e"は必須です。

これは便利です。

+0

最後に、リストボックスの 'activestyle'プロパティに応じて、アンダースコア(または 'dotbox')がアクティブなアイテムをマークし、カーソルが選択されたアイテムのマークであることがわかりました。タブはACTIVE属性を適切なリストボックス内の項目に変更するだけなので、その項目もカーソルをカーソルに移動するために「選択済み」としてマークされる必要があります。これは、Tabキーをバインドして追加のマナバーを許可することによって行われます。私はそれがどのように行われたかを示すために質問を編集しました。 – Jay

答えて

0

下線、カーソルがリストボックスアイテムの異なる属性を表す -

  • デフォルトである、マーキング下線activestyleリストボックスの属性 、アクティブな項目を示しています。

  • カーソルは、(a)選択した項目のためのものです。

デフォルトでは、Tabキーはこのコンテキストで「アクティブ」の状態に変わり、カーソルには影響しません。

カーソル位置を変更するには、アクティブ項目を(a)選択項目に設定する必要があります。私はこの追加manouverを実行ラムダ関数にTabキーを結合することによって行ってきた:

l1.bind('<Tab>', lambda e: l2.select_set(l2.index(ACTIVE))) 
l2.bind('<Tab>', lambda e: l1.select_set(l1.index(ACTIVE))) 

活性指数は、次に下線項目の上にカーソルを移動させる適切なselect_set()の引数として与えられます。

注:は、私はより一般的な場合のために、イベントeではなく、直接リストボックスを参照するよりも、アクティブな項目をピックアップするために使用されるべきであると思います。しかし、これは2つのリストボックスでうまくいくようです。

関連する問題