2016-07-06 2 views
0

다음 예제에서는 포커스를받지 않도록 노트북을 설정하여 지원되는 바로 가기를 사용하여 위젯에서 위젯으로 이동하는 동안 탭을 건너 뛰었습니다 에 의해 enable_traversal(). 이것은 대부분 작동하지만 전체적으로는 아닙니다. 탭이 이미 표시되어 있지만 포커스가없는 경우 <Alt-Key> 밑줄 스타일의 바로 가기를 누르면 포커스가 제공됩니다. 이 문제를 어떻게 방지 할 수 있습니까?takefocus = NO는 tkinter.ttk를 방지하지 못합니다. 노트 탭에서 포커스를 얻지 못합니다.

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

분명히 말하자면, 필자는 노트북 상단의 탭 레이블이 각 탭에 포함 된 프레임이 아니라 포커스를 얻지 못하도록하고 싶습니다. 'tab.tob (0) [ 'takefocus'] = NO' 그러나 탭의 레이블이 아닌 탭에 포함 된 프레임의 옵션을 설정한다고 생각합니다. 보이지 않는 위젯은 기본적으로 초점을 맞추지 않으므로 아무런 변화가 없었습니다. – IJKLefty

+0

탭 자체는'takefocus = NO'로 설정된 노트북 자체의 영향을 받아야합니다. 내부의 프레임은 다른 문제이지만 기본 노트북의 일부인 tabctrl 자체가 이와 같이 작동해야합니다. BUT : 옵션을 잘못 입력하지 않은 경우에만 옵션이 사용됩니다. 마지막 탭을 추가 한 후에 설정해야합니다. – R4PH43L

답변

0

underline=0을 추가할까요? 두 줄에서 해당 코드 부분을 제거하십시오. 또한 탭을 추가하는 동안 다른 인수 takefocus=False을 추가하십시오. 노트북을 만들 때 takefocus을 제거하십시오.

+0

탭에 ''스타일의 직접 액세스를 원하기 때문에 밑줄 인수를 추가했습니다. 앞에서 언급했듯이,'takefocus = NO' 인수는 부분적으로 탭 레이블에 포커스를 맞추지 못하게합니다 (즉, Tab 키를 눌러 위젯을 순환하면서). 노트북에서 takefocus를 제거하면 원하는 효과가 제거됩니다. nb.add() 메소드 호출에 takefocus = NO를 추가하면 탭 레이블이 아닌 탭의 프레임에 대해 해당 옵션이 설정되는 것으로 보입니다. 탭 레이블 자체에 액세스 할 수있는 방법이 있습니까? – IJKLefty

관련 문제