Ausgabeproblem bei Liste von Dictionaries

Fragen zu Tkinter.
Gisi
User
Beiträge: 15
Registriert: Sonntag 13. Mai 2007, 17:28

Ausgabeproblem bei Liste von Dictionaries

Beitragvon Gisi » Mittwoch 13. Juni 2007, 11:15

Hi,

folgendes Dictionary sei ein Corpus:

Code: Alles auswählen

[{'Erstzulassung': '04/00', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '72.000 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111259405817', 'Preis': '76.900', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '10/00', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': '--', 'Farbe': 'schwarz-metallic', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '77.500 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111259405817', 'Preis': '77.500', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '06/00', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaanlage', 'Farbe': 'schwarz-metallic', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '131.000 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111259405817', 'Preis': '88.500', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '04/01', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '--', 'Kilometer': '62.500 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111263406584', 'Preis': '89.000', 'Kraftstoffart': 'Benzin', 'Anbieter': 'privat', 'Tueren': '--'}, {'Erstzulassung': '06/01', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': '--', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': '--', 'Leistung': '298 kW', 'Kilometer': '--', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111263406584', 'Preis': '91.900', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '11/01', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '65.000 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111263406584', 'Preis': '93.500', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '10/01', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': '--', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '34.900 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111172855388', 'Preis': '109.000', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '03/05', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': '--', 'Farbe': '--', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '335 kW', 'Kilometer': '13.476 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111172855388', 'Preis': '118.000', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '02/02', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz-metallic', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '80.500 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111172855388', 'Preis': '119.900', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '04/02', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '336 kW', 'Kilometer': '42.000 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111258913457', 'Preis': '159.750', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '04/04', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': '--', 'Farbe': '--', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '335 kW', 'Kilometer': '34.500 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111258913457', 'Preis': '160.000', 'Kraftstoffart': 'Benzin', 'Anbieter': 'privat', 'Tueren': '--'}, {'Erstzulassung': '05/04', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': '--', 'Leistung': '336 kW', 'Kilometer': '20.800 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111258913457', 'Preis': '161.999', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '09/03', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': '--', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': '--', 'Leistung': '298 kW', 'Kilometer': '120 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111263042333', 'Preis': '165.000', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '02/03', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '336 kW', 'Kilometer': '16.900 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111263042333', 'Preis': '168.500', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '02/02', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '336 kW', 'Kilometer': '22.000 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111263042333', 'Preis': '174.900', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '09/04', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz-metallic', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '8.900 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111254063539', 'Preis': '219.500', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '01/06', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz-metallic', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '298 kW', 'Kilometer': '13.900 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111254063539', 'Preis': '245.000', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '--', 'Fahrzeugart': '--', 'Klima': '--', 'Farbe': '--', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '336 kW', 'Kilometer': '--', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111254063539', 'Preis': '288.902', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '--', 'Fahrzeugart': '--', 'Klima': '--', 'Farbe': 'schwarz', 'ESP': '--', 'ABS': '--', 'Leistung': '373 kW', 'Kilometer': '0 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111262861386', 'Preis': '313.500', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '04/07', 'Fahrzeugart': 'Gebrauchtfahrzeug', 'Klima': 'Klimaautomatik', 'Farbe': 'schwarz', 'ESP': 'ESP', 'ABS': 'ABS', 'Leistung': '372 kW', 'Kilometer': '1.500 km', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111262861386', 'Preis': '324.900', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}, {'Erstzulassung': '--', 'Fahrzeugart': '--', 'Klima': 'Klimaautomatik', 'Farbe': '--', 'ESP': '--', 'ABS': 'ABS', 'Leistung': '373 kW', 'Kilometer': '--', 'Link': 'http://mobile.de/cgi-bin/da.pl?bereich=pkw&id=11111111262861386', 'Preis': '326.448', 'Kraftstoffart': 'Benzin', 'Anbieter': '--', 'Tueren': '--'}]


Das ganze soll in einer Tabelle ausgegeben werden. In jeder Zeile steht dabei ein Fahrzeug, bzw ein Dictionary. Ist die Liste kleiner, zB mit nur 4 Fahrzeugen (Dictionaries), funktioniert folgender Code (Aussschnitt):

Code: Alles auswählen

from os import *
from Tkinter import *

ausgabeFun(listebla)

def buttonHighlight(button):
    button.config(fg="red")
def unHighlight(button):
    button.config(fg="black")

def detail(ausgabe,listeVonDicts):
    ausgabe.destroy()
    listeVonKeys=["Fahrzeugart","Preis","Kraftstoffart","Kilometer", "Leistung", "Tueren", "Farbe", "Erstzulassung",
                  "Klima", "Anbieter", "ABS", "ESP", "Link"]
    dieListeVonDenValues=[]
   

    for i in range(len(listeVonDicts)):
        auto=listeVonDicts[i]
        dieListeVonDenValues.append([auto[key] for key in listeVonKeys])
     
    ausgabe=Tk()
    ausgabe.title("Ergebnis : Details")

    i=0
    for row in range(len(dieListeVonDenValues)+1):
        n=0
        for column in listeVonKeys:
                if i==0:
                    Label(ausgabe, text=column).grid(row=i, column=n+1, sticky=W+E)
                elif n==0:
                    Label(ausgabe, text=row).grid(row=i, column=n, sticky=W+E)
                else:
                    for zeile in range(len(dieListeVonDenValues)):
                            for spalte in range(len(dieListeVonDenValues[zeile])):
                                    if zeile % 2==0 and spalte!=listeVonKeys.index("Link"):
                                            lab=Label(ausgabe, text=dieListeVonDenValues[zeile][spalte], bg="grey").grid(
                                                row=zeile+1, column=spalte+1, sticky=E+W)
                                    elif zeile % 2 !=0 and spalte != listeVonKeys.index("Link"):
                                            labl=Label(ausgabe, text=dieListeVonDenValues[zeile][spalte], bg="white").grid(
                                                row=zeile+1, column=spalte+1, sticky=E+W)
                                    if spalte==listeVonKeys.index("Link")-2:
                                            if zeile % 2==0:
                                                butt=Button(ausgabe, text="Zur Anzeige", command=lambda zeile=zeile:startfile(
                                                    dieListeVonDenValues[zeile][spalte]), bg="grey")
                                                butt.bind('<Enter>', lambda event, butt=butt:buttonHighlight(butt))
                                                butt.bind('<Leave>', lambda event, butt=butt:unHighlight(butt))
                                                butt.grid(
                                                    row=zeile+1, column=listeVonKeys.index("Link")+1, sticky=E+W)
                                            else:
                                                butt=Button(ausgabe, text="Zur Anzeige", command=lambda zeile=zeile:startfile(
                                                    dieListeVonDenValues[zeile][spalte]), bg="white")
                                                butt.bind('<Enter>', lambda event, butt=butt:buttonHighlight(butt))
                                                butt.bind('<Leave>', lambda event, butt=butt:unHighlight(butt))
                                                butt.grid(
                                                    row=zeile+1, column=listeVonKeys.index("Link")+1, sticky=E+W)
                                       
                n+=1
        i+=1
    neu=Button(ausgabe, text="Neue Suche", command=ausgabe.destroy, bg="white")
    neu.bind('<Enter>', lambda event, neu=neu:buttonHighlight(neu))
    neu.bind('<Leave>', lambda event, neu=neu:unHighlight(neu))
    neu.grid(column=0, columnspan=len(listeVonKeys)+1, sticky=W+E)
   
    ende=Button(ausgabe, text="Beenden", command=hauptfenster.quit, bg="white")
    ende.bind('<Enter>', lambda event, ende=ende:buttonHighlight(ende))
    ende.bind('<Leave>', lambda event, ende=ende:unHighlight(ende))
    ende.grid(column=0, columnspan=len(listeVonKeys)+1, sticky=W+E)
   
def ausgabeFun(listeVonDicts):
    listeVonKeys=["Preis","Kraftstoffart","Kilometer", "Leistung", "Farbe", "Erstzulassung",
                  "Anbieter", "Link"]
    dieListeVonDenValues=[]
   

    for i in range(len(listeVonDicts)):
        auto=listeVonDicts[i]
        dieListeVonDenValues.append([auto[key] for key in listeVonKeys])
     
    ausgabe=Tk()
    ausgabe.title("Ergebnis")

    i=0
    for row in range(len(dieListeVonDenValues)+1):
        n=0
        for column in listeVonKeys:
                if i==0:
                    Label(ausgabe, text=column).grid(row=i, column=n+1, sticky=W+E)
                elif n==0:
                    Label(ausgabe, text=row).grid(row=i, column=n, sticky=W+E)
                else:
                    for zeile in range(len(dieListeVonDenValues)):
                            for spalte in range(len(dieListeVonDenValues[zeile])):
                                    if zeile % 2==0 and spalte!=listeVonKeys.index("Link"):
                                            lab=Label(ausgabe, text=dieListeVonDenValues[zeile][spalte], bg="grey").grid(
                                                row=zeile+1, column=spalte+1, sticky=E+W)
                                    elif zeile % 2 !=0 and spalte != listeVonKeys.index("Link"):
                                            labl=Label(ausgabe, text=dieListeVonDenValues[zeile][spalte], bg="white").grid(
                                                row=zeile+1, column=spalte+1, sticky=E+W)
                                    if spalte==listeVonKeys.index("Link")-2:
                                            if zeile % 2==0:
                                                butt=Button(ausgabe, text="Zur Anzeige", command=lambda zeile=zeile:startfile(
                                                    dieListeVonDenValues[zeile][spalte]), bg="grey")
                                                butt.bind('<Enter>', lambda event, butt=butt:buttonHighlight(butt))
                                                butt.bind('<Leave>', lambda event, butt=butt:unHighlight(butt))
                                                butt.grid(
                                                    row=zeile+1, column=listeVonKeys.index("Link")+1, sticky=E+W)         
                                            else:
                                                butt=Button(ausgabe, text="Zur Anzeige", command=lambda zeile=zeile:startfile(
                                                    dieListeVonDenValues[zeile][spalte]), bg="white")
                                                butt.bind('<Enter>', lambda event, butt=butt:buttonHighlight(butt))
                                                butt.bind('<Leave>', lambda event, butt=butt:unHighlight(butt))
                                                butt.grid(
                                                    row=zeile+1, column=listeVonKeys.index("Link")+1, sticky=E+W)
                n+=1
        i+=1
    neu=Button(ausgabe, text="Neue Suche", command=ausgabe.destroy, bg="white")
    neu.bind('<Enter>', lambda event, neu=neu:buttonHighlight(neu))
    neu.bind('<Leave>', lambda event, neu=neu:unHighlight(neu))
    neu.grid(column=0, columnspan=len(listeVonKeys)+1, sticky=W+E)
    detailB=Button(ausgabe, text="Detailausgabe", command=lambda:detail(ausgabe,listeVonDicts), bg="white")
    detailB.bind('<Enter>', lambda event, detailB=detailB:buttonHighlight(detailB))
    detailB.bind('<Leave>', lambda event, detailB=detailB:unHighlight(detailB))
    detailB.grid(column=0, columnspan=len(listeVonKeys)+1, sticky=W+E)
    ende=Button(ausgabe, text="Beenden", command=hauptfenster.quit, bg="white")
    ende.bind('<Enter>', lambda event, ende=ende:buttonHighlight(ende))
    ende.bind('<Leave>', lambda event, ende=ende:unHighlight(ende))
    ende.grid(column=0, columnspan=len(listeVonKeys)+1, sticky=W+E)


Wenn aber die Liste zu lang ist, wie die oben gepostetete, funktionierts nicht mehr. Python stürzt ab.

Weiß einer Rat?

Danke im Vorraus,

Gisi

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]