Editierbare Zellen im Treeview mit Glade

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Schnuggl
User
Beiträge: 6
Registriert: Montag 13. Januar 2020, 13:42

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>
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Schnuggl
User
Beiträge: 6
Registriert: Montag 13. Januar 2020, 13:42

Herzlichen Dank,
Problem gelöst.
Antworten