2009-05-21 3 views
1

내 gtk 응용 프로그램이로드되면 툴바의 첫 번째 항목이 자동으로 선택됩니다 (강조 표시되고 Enter 키를 누를 때 누름). 이것은 사소한 문제 일 뿐이지 만 기본적으로 아무것도 선택하지 않는 것이 좋습니다. 여기 gtk 응용 프로그램이로드 될 때 첫 번째 툴바 버튼이 자동으로 선택되는 이유는 무엇입니까?

몇 가지 기본적인 예제 코드입니다 : 이것은 아마 GTK 일부 위젯에 초점을 나눠 +됩니다

<?xml version="1.0"?> 
<glade-interface> 
    <!-- interface-requires gtk+ 2.16 --> 
    <!-- interface-naming-policy project-wide --> 
    <widget class="GtkWindow" id="window1"> 
    <property name="width_request">200</property> 
    <property name="visible">True</property> 
    <child> 
     <widget class="GtkToolbar" id="toolbar1"> 
     <property name="visible">True</property> 
     <child> 
      <widget class="GtkToolButton" id="toolbutton1"> 
      <property name="visible">True</property> 
      <property name="label" translatable="yes">toolbutton1</property> 
      <property name="use_underline">True</property> 
      <property name="stock_id">gtk-new</property> 
      </widget> 
      <packing> 
      <property name="expand">False</property> 
      <property name="homogeneous">True</property> 
      </packing> 
     </child> 
     <child> 
      <widget class="GtkToolButton" id="toolbutton2"> 
      <property name="visible">True</property> 
      <property name="label" translatable="yes">toolbutton2</property> 
      <property name="use_underline">True</property> 
      <property name="stock_id">gtk-open</property> 
      </widget> 
      <packing> 
      <property name="expand">False</property> 
      <property name="homogeneous">True</property> 
      </packing> 
     </child> 
     </widget> 
    </child> 
    </widget> 
</glade-interface> 

답변

3

import gtk 
import gtk.glade 

window_tree = gtk.glade.XML('testtoolbar.glade') 

gtk.main() 

testtoolbar.glade, 가능한 경우 위젯이 집중이 좋아한다.

grab_focus()을 사용하여 원하는 위치로 포커스를 이동하여 원하는 동작을 얻을 수 있습니다. 툴바가 당신이 가진 위젯 일 뿐이라면 적절한 "포커스"를 찾기가 어려울 수도 있습니다.

1

언제든지 위젯을 추가하여 보이지 않게 할 수 있으며 포커스를 이동할 수 있습니다. 비록 내가 이것을 이슈로 삼거나 그 누구도 알지는 못했지만.

0

앱에서 첫 번째 위젯이므로 포커스가 있습니다. Glade를 사용하는 경우 다른 위젯에 "예"로 "포커스가 있음"을 설정할 수 있으며 시작시 툴바는 자동으로 포커스를 잃게됩니다.

2

gtk.ToolButton은 gtk.Bin을 상속합니다.

gtk.Bin는 한 아이와 컨테이너 위젯을 정의하는 추상 기본 클래스입니다.

그래서 버튼은 컨테이너와

btn.set_can_focus(False) 

가 작동하지 않습니다이다. 당신은

btn.set_focus_chain([]) 

또는 도구 모음의 모든 버튼에 필요한

toolbar.foreach(lambda x: x.set_focus_chain([]))