2016-07-06 22 views
0

次の例では、フォーカスを取らないようにノートブックを設定して、サポートされているショートカットを使用してウィジェットからウィジェットにナビゲートする際にタブをスキップします〜によってenable_traversal()。これは主に機能しますが、完全には機能しません。タブが既に表示されているがフォーカスがない場合は、<Alt-Key>のアンダーラインスタイルのショートカットを押すとフォーカスが得られます。どうすればこれを防ぐことができますか?takefocus = NOはtkinter.ttk.Notebookタブがフォーカスを取得するのを防ぐことができません

from tkinter import * 
from tkinter import ttk 

root = Tk() 

nb = ttk.Notebook(root, takefocus = NO) 
nb.enable_traversal() 

f1 = Frame(nb) 
b1a = Button(f1, text = 'Charlie') 
b1b = Button(f1, text = 'Delta') 

f2 = Frame(nb) 
b2a = Button(f2, text = 'Echo') 
b2b = Button(f2, text = 'Foxtrot') 

b1a.pack() 
b1b.pack() 

b2a.pack() 
b2b.pack() 

f1.pack() 
f2.pack() 

nb.pack() 

nb.add(f1, text = 'Alpha', underline = 0) 
nb.add(f2, text = 'Bravo', underline = 0) 
+0

テイクフォーカスの効果については、[docs](http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Notebook.html)をお読みください。これは、ノートブック自体がフォーカストラバーサルを介してフォーカスを取ることを防止する。タブではありません。 – R4PH43L

+0

明確にするには、ノートブックの上部にあるタブのラベルにフォーカスを当てるのではなく、各タブに含まれるフレームを避けたいと思います。 'tabf(0)['takefocus'] = NO'しかし、タブのラベルではなく、タブに含まれるフレームのオプションを設定すると思われます。見えないウィジェットはデフォルトでフォーカスを取らないので、変更は見られませんでした。 – IJKLefty

+0

タブ自体は 'takefocus = NO'に設定されたノートブック自体の影響を受けるはずです。内部のフレームは別の問題ですが、基本的なノートブックの一部としてtabctrl自体がそのように動作する必要があります。 BUT:このオプションでは、間違っていない場合は、そこにあるものだけを取ります。最後のタブを追加した後に設定する必要があります。 – R4PH43L

答えて

0

なぜunderline=0を追加するのですか?両方の行でそのコードを削除します。また、タブを追加しながら別の引数takefocus=Falseを追加します。ノートブックを作成するときはtakefocusを削除してください。

+0

タブに ''スタイルの直接アクセスをしたいので、下線の引数を追加しました。前述したように、 'takefocus = NO'引数は、タブラベルにフォーカスがない(Tabを押してウィジェットを循環する)のを部分的に防ぎます。ノートブックからテイクフォーカスを取り除くと、この効果が失われます。 nb.add()メソッド呼び出しにtakefocus = NOを追加すると、タブのフレームではなく、タブのフレームにそのオプションが設定されているようです。タブラベル自体にアクセスできる方法はありますか? – IJKLefty

関連する問題