1

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>
4

4 に答える 4

3

これはおそらくGTK+がいくつかのウィジェットにフォーカスを渡すだけであり、可能であればウィジェットにフォーカスを持たせるのが好きです。

を使用grab_focus()してフォーカスを別の場所に移動し、目的の動作を得ることができます。ただし、ツールバーがすべてのウィジェットである場合、適切なフォーカス「ターゲット」を見つけるのは難しいかもしれません。

于 2009-05-22T08:21:50.350 に答える
2

gtk.ToolButtonはgtk.Binを継承します。

gtk.Binは、子が1つだけのコンテナであるウィジェットを定義する抽象基本クラスです。

つまり、ボタンはコンテナであり、

btn.set_can_focus(False)

動作しないでしょう。あなたが必要です

btn.set_focus_chain([])

またはツールバーのすべてのボタンに対して

toolbar.foreach(lambda x: x.set_focus_chain([]))
于 2013-05-17T09:08:17.930 に答える
1

いつでもウィジェットを追加して非表示にし、フォーカスを転送することができます。私はこれが問題であるとか、他の誰かのことを知っているとは思いませんが。

于 2009-06-13T02:19:27.257 に答える
0

アプリの最初のウィジェットであるため、フォーカスがあります。空き地を使用する場合は、他のウィジェットに対して[フォーカスあり]を[はい]に設定すると、ツールバーは起動時に自動的にフォーカスを失います。

于 2011-12-08T13:27:25.600 に答える