treeview mit alternierender hintergrundfarbe

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
borg
User
Beiträge: 2
Registriert: Freitag 17. November 2006, 23:16

Freitag 17. November 2006, 23:25

hallo,

ich hab ein treeview und möchte gerne die hintergrundfarbe der zellen abwechselnd haben.
dazu kann man einfach das property "rules-hint" vom treeview auf True setzen, leider hat dann wirklich jede zeile wieder eine neue farbe, ich würds aber gerne so haben:

Code: Alles auswählen

| grau
| weiß
-- weiß
 | weiß
 | weiß
| grau
-- grau
 | grau
| weiß
usw.
also alles was zu einer aufgeklappten zelle gehört soll die gleiche farbe haben.
einer eine ahnung wie ich das hinbekommen könnte?
wscharinger
User
Beiträge: 12
Registriert: Freitag 26. Mai 2006, 11:18

Sonntag 19. November 2006, 13:24

borg hat geschrieben:hallo,

ich hab ein treeview und möchte gerne die hintergrundfarbe der zellen abwechselnd haben.
dazu kann man einfach das property "rules-hint" vom treeview auf True setzen, leider hat dann wirklich jede zeile wieder eine neue farbe, ich würds aber gerne so haben:

Code: Alles auswählen

| grau
| weiß
-- weiß
 | weiß
 | weiß
| grau
-- grau
 | grau
| weiß
usw.
also alles was zu einer aufgeklappten zelle gehört soll die gleiche farbe haben.
einer eine ahnung wie ich das hinbekommen könnte?
Wie genau die Vorgehensweise für dein Beispiel ist, kann ich dir jetzt auf die Schnelle nicht zusammenstellen, aber ich denke, du kannst das mit folgender Funktion hinbekommen:

Code: Alles auswählen


        def type_col_datafunc(column, cell, model, iter):
            # Funktion wird unten für jede Zelle aufgerufen

            # evtl. Werte aus dem TreeModel auslesen
            art = model.get_value(iter, 0)
            wert = model.get_value(iter, 1)

            # jetzt anhand der ausgelesenen Werte Attribute zuweisen.
            # Beachte: Attribut bleibt solange "aktiv", bis du es wieder
            # mit einem anderen Wert belegst.
            # Wenn also im "true-zweig" für eine Zelle die Schrift auf blau 
            # geschaltet wird, bleibt sie solange blau, bis du sie - evtl. im 
            # "else-Zweig" wieder auf schwarz stellst.
            if wert == "xy":
                # wenn Bedingung war, Attribute setzen
                self.cell1.set_property('background', 'blue')
                self.cell1.set_property('weight', 800)
            else:
                # hier Attribute wieder zurück- oder anders setzen
                self.cell1.set_property('background', 'green')
                self.cell1.set_property('weight', 400)

        # Hier die Funktion für die Zell-Formatierung zuweisen
        self.treeviewcolumn.set_cell_data_func(self.cell1, type_col_datafunc)

borg
User
Beiträge: 2
Registriert: Freitag 17. November 2006, 23:16

Montag 20. November 2006, 20:35

besten dank, funktioniert.
jetzt ist nur noch die frage wie ich an die default-farben komme.

treeview.style_get_property("odd-row-color")
und
treeview.style_get_property("even-row-color")

geben immer None zurück. ich wollte die farben aber eigentlich schon so machen wie sie im jeweiligem theme sind. hat da vielleicht auch jemand ne idee wie man da dran kommt? :)
wscharinger
User
Beiträge: 12
Registriert: Freitag 26. Mai 2006, 11:18

Mittwoch 29. November 2006, 18:52

borg hat geschrieben:besten dank, funktioniert.
jetzt ist nur noch die frage wie ich an die default-farben komme.

treeview.style_get_property("odd-row-color")
und
treeview.style_get_property("even-row-color")

geben immer None zurück. ich wollte die farben aber eigentlich schon so machen wie sie im jeweiligem theme sind. hat da vielleicht auch jemand ne idee wie man da dran kommt? :)
Hmmmm? Hast du den bei Properties "rules-hint" auf True gestellt?
Hab's nicht probiert, würde aber mal annehmen, dass du None bekommst, falls die Hint's False sind? Nur mal so in's Blaue...
Antworten