Seite 1 von 1

"gestreifte" Listbox

Verfasst: Freitag 14. Januar 2005, 21:44
von DaFe4U
Hallo zusammen,

eine kurze, sicher ziemlich häufig gestellte Frage, auch wenn ich sie hier noch nicht gefunden habe...
Wie kann ich am einfachsten eine Listbox erzeugen, deren Zeilen z.B. abwechselnd einen farbigen Hintergrund haben? Mir gelingt dies derzeit nur mit Listboxen, in denen bereits Einträge sind. Ich brauche dies aber für eine leere Listbox.
Entweder suche ich nach den falschen Begriffen oder ich habe gerade ein ziemliches Brett vor dem Kopf :wink:

Gruß,
DaFe4u

Verfasst: Samstag 15. Januar 2005, 11:06
von DER Olf
hi,

ich bezweifle leider, dass das geht,

aber du könntest ja einen frame verwenden mit labels drin, die abwechselnd eine farbe haben...

Verfasst: Samstag 15. Januar 2005, 11:18
von DER Olf
so, ich hab mal schnell was gebastelt, sehr unsauber...aber das ist ja jetzt egal...die maus-funktionen beim klick auf ein label musst du noch selbst
hinzufügen :)

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-

import Tkinter

class TkColorListbox(Tkinter.Frame):
    def __init__(self, parent, entrys_num, bg1, bg2,
                 fg1, fg2):
        if bg1 == None:
            self.bg1 = "#ffffff"
        else:
            self.bg1 = bg1
        if bg2 == None:
            self.bg2 = "#cccccc"
        else:
            self.bg2 = bg2
        if fg1 == None:
            self.fg1 = "#000000"
        else:
            self.fg1 = fg1
        if fg2 == None:
            self.fg2 = "#000000"
        else:
            self.fg2 = fg2
        
        Tkinter.Frame.__init__(self, parent)
        self["relief"] = "sunken"
        self["borderwidth"] = 2
        self["bg"] = "#ffffff"

        entrys = []

        act = 0

        for i in range(0, entrys_num):
            entrys.append(Tkinter.Label(self, text="hallo welt"))
            
            if act == 0:
                entrys[i]["bg"] = self.bg1
                entrys[i]["fg"] = self.fg1
                act = 1
            elif act == 1:
                entrys[i]["bg"] = self.bg2
                entrys[i]["fg"] = self.fg2
                act = 0
            entrys[i].pack()

if __name__ == "__main__":
    root = Tkinter.Tk()
    box = TkColorListbox(root, 5, None, None, None, None)
    box.pack()
    root.mainloop()
### edit

den parameter entry_num solltest du am besten aus der ganzen klasse streichen...sie war nur zum testen vorgesehen :)