GTK 애플리케이션이로드 될 때 첫 번째 도구 모음 버튼이 자동으로 선택된 이유는 무엇입니까?
문제
내 GTK 응용 프로그램이로드되면 도구 모음의 첫 번째 항목이 자동으로 선택됩니다 (강조 표시되면 Enter가 누르면 누릅니다). 이것은 단지 사소한 문제이지만 기본적으로 선택되지 않는 것을 선호합니다.
다음은 몇 가지 기본 샘플 코드입니다.
import gtk
import gtk.glade
window_tree = gtk.glade.XML('testtoolbar.glade')
gtk.main()
testToolbar.glade
<?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>
해결책
이것은 아마도 GTK+ 일 뿐이며 일부 위젯에 초점을 맞추는 것입니다. 가능한 경우 위젯에 중점을 두는 것을 좋아합니다.
당신이 사용할 수있는 grab_focus ()
다른 곳으로 초점을 이동하려면 원하는 동작을 얻으십시오. 도구 모음이 당신이 가진 모든 위젯 인 경우, 적절한 초점 "대상"을 찾기가 어려울 수 있습니다.
다른 팁
gtk.toolbutton은 gtk.bin을 상속합니다.
gtk.bin은 위젯을 정의하는 추상적 인 기본 클래스입니다. 한 아이 만있는 용기.
그래서 버튼은 컨테이너입니다
btn.set_can_focus(False)
작동 안 할 것이다. 당신은 필요합니다
btn.set_focus_chain([])
또는 툴바의 모든 버튼에 대해
toolbar.foreach(lambda x: x.set_focus_chain([]))
언제든지 위젯을 추가하고 보이지 않게하고 초점을 전송할 수 있습니다. 비록 나는 이것이 실제로 문제가되거나 다른 사람을 알고있는 것을 알지는 못합니다.
앱의 첫 번째 위젯이기 때문에 초점이 맞습니다. Glade를 사용하는 경우 다른 위젯에 '예'에 초점을 맞추고 도구 모음은 자동으로 시작에 초점을 잃게됩니다.
제휴하지 않습니다 StackOverflow