GTK 애플리케이션이로드 될 때 첫 번째 도구 모음 버튼이 자동으로 선택된 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/894876

  •  23-08-2019
  •  | 
  •  

문제

내 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를 사용하는 경우 다른 위젯에 '예'에 초점을 맞추고 도구 모음은 자동으로 시작에 초점을 잃게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top