Seite 1 von 1

Editierbare Zellen im Treeview mit Glade

Verfasst: Samstag 18. Januar 2020, 17:12
von Schnuggl
Hallo zusammen,

im Code gelingt es mir die Zellen meines Treeviews editierbar zu machen.
Mit Glade aber nicht.
Ich verstehe nicht warum.

Code: Alles auswählen

#!/usr/bin/env python3
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class App:
    def __init__(self):
        builder = Gtk.Builder()
        builder.add_from_file("Codefragment.glade")
        builder.connect_signals(self)

        window = builder.get_object("TVFenster")
        window.show_all()
        self.list_store = builder.get_object("Liststore")
        self.tree_view = builder.get_object("Treeview")
        self.list_store.append(["irgendwas"])

        renderer1 = builder.get_object("Renderer1")
        # renderer1.get_property("editable") liefert false - was muss ich in Glade tun, damit es True liefert???
        print(renderer1.get_property("editable"))
        # Folgendes ist doch bestimmt nicht die einzige Möglichkeit, oder?
        renderer1.set_property("editable", True)
        print(renderer1.get_property("editable"))

    @staticmethod
    def on_tv_fenster_destroy(_widget):
        Gtk.main_quit()

def main():
    _app = App()
    Gtk.main()

if __name__ == "__main__":
    main()

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkListStore" id="Liststore">
    <columns>
      <!-- column-name spalte1 -->
      <column type="gchararray"/>
    </columns>
  </object>
  <object class="GtkWindow" id="TVFenster">
    <property name="can_focus">False</property>
    <signal name="destroy" handler="on_tv_fenster_destroy" swapped="no"/>
    <child>
      <placeholder/>
    </child>
    <child>
      <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"/>
        </child>
        <child>
          <object class="GtkTreeViewColumn" id="spalte1">
            <property name="resizable">True</property>
            <property name="title" translatable="yes">column</property>
            <property name="clickable">True</property>
            <child>
              <object class="GtkCellRendererText" id="Renderer1"/>
              <attributes>
                <attribute name="editable">0</attribute>
                <attribute name="text">0</attribute>
              </attributes>
            </child>
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>

Re: Editierbare Zellen im Treeview mit Glade

Verfasst: Samstag 25. Januar 2020, 11:03
von __blackjack__
@Schnuggl: Du hast in Glade angegeben das die Model-Spalte 0 darüber entscheidet ob die TreeView-Spalte "spalte1" bearbeitbar ist. Eine Model-Spalte vom Typ `gchararray` ist da nicht wirklich sinnvoll geeignet. Und Du möchtest das ja anscheinend auch nicht pro Zeile im TreeView entscheiden, also sollte man diese Eigenschaft auch nicht aus den Zeilen des Models holen.

Du musst in Glade beim CellRendererText vor „editable“ die Checkbox deaktivieren – dann bekommst Du anstelle der Spaltenauswahl aus dem Model einen Schalter mit dem Du die Bearbeitbarkeit an/aus schalten kannst.

Re: Editierbare Zellen im Treeview mit Glade

Verfasst: Freitag 31. Januar 2020, 18:31
von Schnuggl
Herzlichen Dank,
Problem gelöst.