Glade GTK3 Python переключает древовидную структуру - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть приложение, в котором GtkCellRendererToggle не вызывает обратный вызов, когда я использую Glade для сборки приложения.В частности, если кнопка переключения установлена ​​в значение True, когда я нажимаю на нее, выполняется обратный вызов, но когда кнопка переключается в значение False, обратный вызов не запускается.

Я использую Python 3, GTK3 иGlade 3.22.1 Я включаю исходный код Python вместе с соответствующим XML.Рабочий пример взят из учебника по Python GTK3: https://python -gtk-3-tutorial.readthedocs.io / en / latest / cellrenderers.html

Цитата

<object class="GtkTreeView" id="treeview">
      <property name="visible">True</property>
      <property name="can_focus">True</property>
      <property name="model">liststore</property>
      <child internal-child="selection">
          <object class="GtkTreeSelection">
              <property name="mode">none</property>
          </object>
      </child>
      <child>
          <object class="GtkTreeViewColumn" id="togglecolumn">
          <property name="title">Togggle</property>
      <child>
          <object class="GtkCellRendererToggle" id="togglerenderer">
              <signal name="toggled" handler="on_cell_toggled" swapped="no"/>
          </object>
              <attributes>
                  <attribute name="activatable">0</attribute>
                  <attribute name="active">0</attribute>
              </attributes>
      </child>
</object>

/>

Blockquote

builder = Gtk.Builder()
builder.add_from_file("example.glade")
window = builder.get_object("window")
# Load list data.
self.liststore = builder.get_object ("liststore")

builder.connect_signals(self)
window.show()

def on_cell_toggled(self, widget, path):
    self.liststore[path][0] = not self.liststore[path][0]

/>

То, что вы увидите, это 3 строки переключателякнопки с первой и третьей проверены.Если вы щелкнете по одному из отмеченных флажков, обратный вызов on_cell_toggle будет выполнен, но как только он будет переключен на false, он больше не будет вызывать обратный вызов.В примере из учебника переключатель работает, как и ожидалось.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы установили активируемое свойство в тот же столбец, что и активное свойство:

<attributes>
    <attribute name="activatable">0</attribute>
     <attribute name="active">0</attribute>
</attributes>

должно быть:

<attributes>
     <attribute name="active">0</attribute>
</attributes>
...