"gestreifte" Listbox

Fragen zu Tkinter.
DaFe4U
User
Beiträge: 9
Registriert: Freitag 16. April 2004, 22:05

"gestreifte" Listbox

Beitragvon DaFe4U » Freitag 14. Januar 2005, 21:44

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
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Beitragvon DER Olf » Samstag 15. Januar 2005, 11:06

hi,

ich bezweifle leider, dass das geht,

aber du könntest ja einen frame verwenden mit labels drin, die abwechselnd eine farbe haben...
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Beitragvon DER Olf » Samstag 15. Januar 2005, 11:18

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 :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder