Почему первая кнопка панели инструментов автоматически выбирается при загрузке моего gtk-приложения? - PullRequest
1 голос
/ 22 мая 2009

Когда мое приложение 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>

Ответы [ 4 ]

3 голосов
/ 22 мая 2009

Это, вероятно, просто GTK +, передающий фокус некоторому виджету, ему нравится, когда виджет фокусируется, если это возможно.

Вы можете использовать <a href="http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-grab-focus" rel="nofollow noreferrer">grab_focus()</a>, чтобы переместить фокус в другое место, чтобы получить желаемое поведение. Если на панели инструментов есть все имеющиеся у вас виджеты, может быть трудно найти подходящую «цель» фокуса.

2 голосов
/ 17 мая 2013

gtk.ToolButton наследует gtk.Bin.

gtk.Bin - это абстрактный базовый класс, определяющий виджет, представляющий собой контейнер с одним дочерним элементом .

Так кнопка является контейнером и

btn.set_can_focus(False)

не будет работать. Вам нужно

btn.set_focus_chain([])

или для каждой кнопки на панели инструментов

toolbar.foreach(lambda x: x.set_focus_chain([]))
1 голос
/ 13 июня 2009

Вы всегда можете добавить виджет и сделать его невидимым, а также перенести на него фокус. Хотя я не считаю это проблемой или знаю кого-то еще, кто это сделал.

0 голосов
/ 08 декабря 2011

Он имеет фокус, потому что это первый виджет в вашем приложении. Если вы используете glade, вы можете установить «Имеет фокус» на «Да» для любого другого виджета, и панель инструментов автоматически потеряет фокус при запуске.

...