なぜ最初のツールバーのボタンを自動的に選択した時gtkアプリケーション?

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

  •  23-08-2019
  •  | 
  •  

質問

私gtkアプリケーションの最初の項目は、ツールバーが自動的に選択されたので、押されたときにヒット入).これは、小さな問題から好みなしから選択されています。

ここではいくつかの基本サンプルコード:

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()を使用することができます。ツールバーはあなたが持っているすべてのwidgetryであれば、しかし、適したフォーカス「ターゲット」を見つけるのは難しいかもしれません。

他のヒント

gtk.ToolButton継承しgtk.便まで。

gtk.Binは、抽象基底クラスを定義するウィジェットとは コンテナだけで子ども.

なボタンはコンテナ

btn.set_can_focus(False)

できません。必要なもの

btn.set_focus_chain([])

やべてのボタンをツールバー

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

あなたは、常にウィジェットを追加し、それを非表示にし、それにフォーカスを移すことができます。私は本当にこれがなかった他の誰の問題やノウハウであることがわかりませんけど。

それはあなたのアプリケーションでは第一ウィジェットですので、フォーカスを持っています。あなたは空き地を使用する場合は、他のウィジェットに「はい」に「フォーカスを持っている」とツールバーが起動時に自動的にフォーカスを失います。

に設定することができます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top